is there any way to turn off exception message showing during run-time in Delphi application?
i think there must be a directive to turn off exception message but i cant remember it.
asked May 18, 2010 at 14:47
3
Most exception messages can be suppressed by handling the TApplication.OnException
event. The application object only displays an exception message if there isn’t a handler assigned to that event. You’re welcome to call TApplication.ShowException
in your handler for certain exceptions if you want.
That event is fired for exceptions that occur while running in the VCL message loop. Exceptions that occur elsewhere terminate either your program or the current thread. Also, the event is fired only for exceptions that descend from Exception
; exceptions that descend from other classes are passed directly to SysUtils.ShowException
.
Whether you display a message or not, your program is still in an indeterminate state once an exception has occurred that you haven’t handled. Merely suppressing the message is akin to sweeping the dust under the rug. A better course of action is to use an exception-logging tool like MadExcept, EurekaLog, or JclDebug that records information about the exception and gives your customers the option of sending the reports back to you so you can reproduce the conditions of the error and fix it.
answered May 18, 2010 at 15:48
Rob KennedyRob Kennedy
161k21 gold badges275 silver badges468 bronze badges
1
I use the IDE to turn it off:
In Delphi 2007, click Tools / Options and go right down to Debugger Options / CodeGear debuggers / Native OS Exceptions. Select «Run Unhandled». The debugger will not halt on exceptions, but act the same as running from an exe. Exceptions will be handled as such.
For directives, I don’t know of one that can exactly do the above, but maybe this will help:
http://www.delphibasics.co.uk/ByType.asp?Type=Compiler%20Directive
answered May 18, 2010 at 15:05
Hein du PlessisHein du Plessis
3,3076 gold badges34 silver badges51 bronze badges
Are you running OpenGL by any chance? I’ve not tried it with the more recent Codegear/OpenGL builds, but there used to be an issue that OpenGL didn’t disable FPU exceptions but the IDE expected these to be turned off by default (as Microsoft libraries do) so the IDE would report FPU exceptions ad-nauseam despite these being of no consequence.
The solution was to explicitly turn of FPU exceptions, which you can do in code using the statement.
Set8087CW($133F);
There may be other libraries where this causes an issue too.
Mason Wheeler
82.6k50 gold badges270 silver badges478 bronze badges
answered May 18, 2010 at 15:17
CruachanCruachan
15.7k5 gold badges60 silver badges112 bronze badges
настройка компилятора — не показывать ошибки
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Full Member Рейтинг (т): 1 |
юзаю try except… запускаю прогу в компиляторе — всеравно выдает ошибку Собственно как отключить эту штуку в компиляторе что бы спокойно можно было из компилятора запускать?? Сообщение отредактировано: 8ka — |
CodeMonkey |
|
Tools/Options/Debugger/Stop on exceptions. |
northener |
|
Цитата 8ka @ Собственно как отключить эту штуку в компиляторе что бы спокойно можно было из компилятора запускать??
Не надо это делать! |
Alexander N |
|
Цитата northener @ Хотя я не понимаю для чего это нужно! Было нужно. Поиск файлов-дубликатов на диске — здесь я обрабатываю неудачное открытие файла одним оператором continue, но таких файлов много, поэтому было напряжно каждый раз закрывать окошко ошибки. |
leo |
|
Цитата Alexander N @ Было нужно. Поиск файлов-дубликатов на диске — здесь я обрабатываю неудачное открытие файла одним оператором continue, но таких файлов много Если «таких файлов много», то это уже не исключительная ситуация, а вполне штатная, поэтому логичнее было бы просто (локально) отключить генерацию исключений при открытии файлов по {$I-} и проверять успешность по IOResult |
Alexander N |
|
Цитата leo @ Если «таких файлов много», то это уже не исключительная ситуация, а вполне штатная, поэтому логичнее было бы просто (локально) отключить генерацию исключений при открытии файлов по {$I-} и проверять успешность по IOResult Как? Я же через TFileStream работал? Сообщение отредактировано: Alexander N — |
leo |
|
Цитата Alexander N @ Как? Я же через TFileStream работал?
Еще лучше — значит нужно было работать через THandleStream + FileOpen\FileClose без всяких IOResult |
Alexander N |
|
Цитата leo @ Еще лучше — значит нужно было работать через THandleStream + FileOpen\FileClose без всяких IOResult А как позицию хранить? Блоками читать? |
leo |
|
Цитата Alexander N @ А как позицию хранить? Блоками читать?
О чем это ты ? TFileStream это совершенно куций фантик для THandleStream, и делает он всего две элементарные вещи: Добавлено var h:integer; strm:THandleStream; begin … h:=FileOpen(FName,Mode); if h >= 0 then begin strm:=THandleStream.Create(h); try … finally strm.Free; FileClose(h); end; end else … //ошибка открытия файла GetLastError end; Сообщение отредактировано: leo — |
Alexander N |
|
А у меня массив из TFileStream — как его заменить? Добавлено |
leo |
|
Цитата Alexander N @ А у меня массив из TFileStream — как его заменить?
Час от часу не легче type TMyFileStream = class(THandleStream) destructor Destroy;override; end; destructor TMyFileStream.Destroy; begin if Handle >= 0 then FileClose(Handle); inherited; end; var files:array of TMyFileStream; h:integer; begin … h:=FileOpen(FName,Mode); if h >= 0 then begin SetLength(files,Length(files)+1); files[Length(files)-1]:=TMyFileStream.Create(h); … end else … //GetLastError end; |
Alexander N |
|
Цитата leo @ Ну определи тогда свой класс, который будет закрывать файл в деструкторе Ну а зачем, если уже есть TFileStream и его хватает с лихвой? |
leo |
|
Цитата Alexander N @ Ну а зачем, если уже есть TFileStream и его хватает с лихвой?
Ага с очень большой лихвой, упомянутой тобой в #4 Сообщение отредактировано: leo — |
Alexander N |
|
Цитата leo @ но и всю систему в целом Каким образом? |
Демо |
|
Установка флага Tools/Options/Debugger/Stop on Delphi exceptions в «on» нужна в очень редких случаях (таких даже не припомню). Используется только для отладки. Обработка исключений — необходимая и нормальная вещь внутри программы. Ко всему прочему, есть компоненты, которые сами обрабатывают исключения (и и гасят их как нужно). Сообщение отредактировано: Демо — |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Общие вопросы
- Следующая тема
[ Script execution time: 0,0384 ] [ 16 queries used ] [ Generated: 21.09.23, 09:55 GMT ]
Почему не показываются ошибки выполнения?
|
От: |
shepelev |
|
Дата: | 11.12.09 09:59 | ||
Оценка: |
В Delphi я новичок. Создаю консольное приложение. Начинаю отлаживать. Ошибки компиляции показывает, а ошибки выполнения — нет.
Просто тихо происходит завершение программы. Покопался в свойствах проекта, но ничего не нашел. Может кто поможет?
ЗЫ: Delphi 7
Re: Почему не показываются ошибки выполнения?
|
От: |
DarkMaster |
http://www.bdslib.at.ua |
Дата: | 11.12.09 10:21 | ||
Оценка: |
Здравствуйте, shepelev, Вы писали:
S>В Delphi я новичок. Создаю консольное приложение. Начинаю отлаживать. Ошибки компиляции показывает, а ошибки выполнения — нет.
S>Просто тихо происходит завершение программы. Покопался в свойствах проекта, но ничего не нашел. Может кто поможет?
S>ЗЫ: Delphi 7
Для любых приложений желательно обрамление потенциально опасного (забагованного) кода в try .. except..
Для тебя достаточно сделать что-то такое:
try
// тут разный код, который может привести к ошибкам исполнения
SomeDo;
except on E:Exception do
writeln(E.Message); // если ошибка произошла, то мы попадем сюда и выведем на консоль сообщение об ошибке.
end;
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[2]: Почему не показываются ошибки выполнения?
|
От: |
shepelev |
|
Дата: | 11.12.09 10:34 | ||
Оценка: |
Здравствуйте, DarkMaster, Вы писали:
DM>Здравствуйте, shepelev, Вы писали:
S>>В Delphi я новичок. Создаю консольное приложение. Начинаю отлаживать. Ошибки компиляции показывает, а ошибки выполнения — нет.
S>>Просто тихо происходит завершение программы. Покопался в свойствах проекта, но ничего не нашел. Может кто поможет?
S>>ЗЫ: Delphi 7
DM>Для любых приложений желательно обрамление потенциально опасного (забагованного) кода в try .. except..
DM>Для тебя достаточно сделать что-то такое:
DM>
DM> try
DM> // тут разный код, который может привести к ошибкам исполнения
DM> Some Do;
DM> except on E:Exception do
DM> writeln(E.Message); // если ошибка произошла, то мы попадем сюда и выведем на консоль сообщение об ошибке.
DM> end;
DM>
Ну это понятно.
А разве в IDE нет средств хоть какого нибудь перехвата ошибок? Даже у мелкомягких есть.
Re[3]: Почему не показываются ошибки выполнения?
|
От: |
DarkMaster |
http://www.bdslib.at.ua |
Дата: | 11.12.09 10:54 | ||
Оценка: |
Здравствуйте, shepelev, Вы писали:
DM>>Для любых приложений желательно обрамление потенциально опасного (забагованного) кода в try .. except..
S>Ну это понятно.
S>А разве в IDE нет средств хоть какого нибудь перехвата ошибок? Даже у мелкомягких есть.
Что ты понимаешь под перехватом ошибок? При запусве в среде у тебя незаглушенные AV прервут исполнение и IDE сама постарается тебя отправить в нужное место исходников. В общем случае — «Find Error» + «Call stack» в руки и вперед.
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[4]: Почему не показываются ошибки выполнения?
|
От: |
shepelev |
|
Дата: | 11.12.09 11:02 | ||
Оценка: |
Здравствуйте, DarkMaster, Вы писали:
DM>Что ты понимаешь под перехватом ошибок? При запусве в среде у тебя незаглушенные AV прервут исполнение и IDE сама постарается тебя отправить в нужное место исходников. В общем случае — «Find Error» + «Call stack» в руки и вперед.
В том то и дело что IDE никуда не отправляет. И ни очем не сообщает
Re: Почему не показываются ошибки выполнения?
|
От: |
Nonmanual Worker |
|
Дата: | 11.12.09 11:22 | ||
Оценка: |
Здравствуйте, shepelev, Вы писали:
S>В Delphi я новичок. Создаю консольное приложение. Начинаю отлаживать. Ошибки компиляции показывает, а ошибки выполнения — нет.
S>Просто тихо происходит завершение программы. Покопался в свойствах проекта, но ничего не нашел. Может кто поможет?
При возникновении Language Exception (из под отладчика) консольные приложения останавливаются с появлением окна, и делфевый отладчик со стандартными настройками показывает место ошибки. Если произошло OS исключение, то окна не будет (из под отладчика, но появится без него) и отладчик не поймает (но можно настроить чтоб ловил), однако в любом случае в стандартный output (на экран) будет выведено сообщение об ошибке.
Поставьте в конце
Writeln('OK);
Readln;
Возможно ваше консольное приложение отработало без ошибок и закончило работу
Re[2]: Почему не показываются ошибки выполнения?
|
От: |
shepelev |
|
Дата: | 11.12.09 11:28 | ||
Оценка: |
Здравствуйте, Nonmanual Worker, Вы писали:
NW>Здравствуйте, shepelev, Вы писали:
S>>В Delphi я новичок. Создаю консольное приложение. Начинаю отлаживать. Ошибки компиляции показывает, а ошибки выполнения — нет.
S>>Просто тихо происходит завершение программы. Покопался в свойствах проекта, но ничего не нашел. Может кто поможет?
NW>При возникновении Language Exception (из под отладчика) консольные приложения останавливаются с появлением окна, и делфевый отладчик со стандартными настройками показывает место ошибки. Если произошло OS исключение, то окна не будет (из под отладчика, но появится без него) и отладчик не поймает (но можно настроить чтоб ловил), однако в любом случае в стандартный output (на экран) будет выведено сообщение об ошибке.
NW>Поставьте в конце
NW>
NW>Writeln('OK);
NW>Readln;
NW>
NW>Возможно ваше консольное приложение отработало без ошибок и закончило работу
Ошибки есть точно (я их находил). Я же пишу сюда не из-за одного случая. А вот в стандартный output ничего не пишется. Собственно в этом то и проблема
Re[3]: Почему не показываются ошибки выполнения?
|
От: |
Nonmanual Worker |
|
Дата: | 11.12.09 12:31 | ||
Оценка: |
Здравствуйте, shepelev, Вы писали:
S>Ошибки есть точно (я их находил). Я же пишу сюда не из-за одного случая. А вот в стандартный output ничего не пишется. Собственно в этом то и проблема
Запустите ваше приложение не из под отладчика, и желательно из командной строки cmd.
Re[5]: Почему не показываются ошибки выполнения?
|
От: |
Danchik |
|
Дата: | 11.12.09 14:49 | ||
Оценка: |
Здравствуйте, shepelev, Вы писали:
S>Здравствуйте, DarkMaster, Вы писали:
DM>>Что ты понимаешь под перехватом ошибок? При запусве в среде у тебя незаглушенные AV прервут исполнение и IDE сама постарается тебя отправить в нужное место исходников. В общем случае — «Find Error» + «Call stack» в руки и вперед.
S>В том то и дело что IDE никуда не отправляет. И ни очем не сообщает
Зайдите в опции IDE. Debugger Options\Codegear debuggers\Language exceptions.
И поставьте чекбокс «Notify on language exceptions».
Также убедитесь что ошибка, на которой у вас не останавливается, не находится в списке «Exception types to ignore»
Re: Почему не показываются ошибки выполнения?
|
От: |
garant |
|
Дата: | 11.12.09 15:01 | ||
Оценка: |
shepelev пишет:
> В Delphi я новичок. Создаю консольное приложение. Начинаю отлаживать.
> Ошибки компиляции показывает, а ошибки выполнения — нет.
> Просто тихо происходит завершение программы. Покопался в свойствах
> проекта, но ничего не нашел. Может кто поможет?
Именно потому, что приложение консольное. В оконном приложении те
исключения, что ты не поймал сам (через try…except), будут обработаны
функцией HandleException объекта TApplication. В консоли никакого
TApplication нет, поэтому свои исключения ты должен ловить сам.
Например, заключить весь код основной программы в try..except и поднять
MessageBox с E.Message (как тебе и посоветовали выше).
.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Почему не показываются ошибки выполнения?
|
От: |
shepelev |
|
Дата: | 12.12.09 20:49 | ||
Оценка: |
Здравствуйте, garant, Вы писали:
G>shepelev пишет:
>> В Delphi я новичок. Создаю консольное приложение. Начинаю отлаживать.
>> Ошибки компиляции показывает, а ошибки выполнения — нет.
>> Просто тихо происходит завершение программы. Покопался в свойствах
>> проекта, но ничего не нашел. Может кто поможет?
G>Именно потому, что приложение консольное. В оконном приложении те
G>исключения, что ты не поймал сам (через try…except), будут обработаны
G>функцией HandleException объекта TApplication. В консоли никакого
G>TApplication нет, поэтому свои исключения ты должен ловить сам.
G>Например, заключить весь код основной программы в try..except и поднять
G>MessageBox с E.Message (как тебе и посоветовали выше).
G>.
А между прочим неожиданно заработало без try..except. Как этого добился не знаю. В свойствах
проекта почекал как обезьяна по клавишам и ошибки стали ловиться.
Re[6]: Почему не показываются ошибки выполнения?
|
От: |
Oleg A. Bachin |
|
Дата: | 18.12.09 23:07 | ||
Оценка: |
Здравствуйте, Danchik, Вы писали:
D>Здравствуйте, shepelev, Вы писали:
S>>Здравствуйте, DarkMaster, Вы писали:
DM>>>Что ты понимаешь под перехватом ошибок? При запусве в среде у тебя незаглушенные AV прервут исполнение и IDE сама постарается тебя отправить в нужное место исходников. В общем случае — «Find Error» + «Call stack» в руки и вперед.
S>>В том то и дело что IDE никуда не отправляет. И ни очем не сообщает
D>Зайдите в опции IDE. Debugger Options\Codegear debuggers\Language exceptions.
D>И поставьте чекбокс «Notify on language exceptions».
D>Также убедитесь что ошибка, на которой у вас не останавливается, не находится в списке «Exception types to ignore»
я кажется понимаю о чем идет речь… в том то и дело, что IDE почему-то как правило не показывает ошибки верхнего уровня. просто сам частенько консольки рисую, потому привык:
procedure main();
...
begin
try
main();
except
...
end
end.
в таком виде дебагер ВСЕГДА нормально останавливается в случае ошибки.
ЗЫ только что проверил, вообще хохма
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure test();
begin
assert(false, 'test');
end;
begin
test();
{
try
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
{}
end.
в таком варианте IDE пролетает на ура, если раскомментировать блок — нормально показывает ассерт даже не смотря на то, что он вне блока. D2010.
Best regards,
Oleg A. Bachin
- Переместить
- Удалить
- Выделить ветку
Пока на собственное сообщение не было ответов, его можно удалить.
0 / 0 / 0 Регистрация: 27.03.2011 Сообщений: 24 |
|
1 |
|
Скрыть окно ошибки19.02.2012, 21:28. Показов 3615. Ответов 8
В общем, проблема в том, что в программе вылезает окно ошибки I/O 104, и это совсем не мешает работе программы.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
19.02.2012, 21:28 |
Ответы с готовыми решениями: скрыть окно begin… Как скрыть окно createprocess Скрыть окно при старте Скрыть ошибки 8 |
2184 / 1254 / 143 Регистрация: 28.04.2010 Сообщений: 4,592 |
|
19.02.2012, 21:36 |
2 |
try
0 |
5702 / 2293 / 466 Регистрация: 20.11.2009 Сообщений: 7,714 Записей в блоге: 1 |
|
19.02.2012, 22:04 |
3 |
а может все же попытаться избавиться от ошибки, открыть файл, вроде бы, а то завтра программа станет просить этот файл для работы, а он не отрабатывается
0 |
0 / 0 / 0 Регистрация: 27.03.2011 Сообщений: 24 |
|
20.02.2012, 20:53 [ТС] |
4 |
а может все же попытаться избавиться от ошибки, открыть файл, вроде бы, а то завтра программа станет просить этот файл для работы, а он не отрабатывается файл вроде открывается нормально, мне кажется, что там как раз с его закрытием проблемы.. в любом случае, как использовать try..except?
0 |
474 / 337 / 36 Регистрация: 31.05.2011 Сообщений: 1,156 |
|
20.02.2012, 21:01 |
5 |
возможно файл открыт на чтение, а ты туда чота пытаешся записать иль чото подобное
0 |
5702 / 2293 / 466 Регистрация: 20.11.2009 Сообщений: 7,714 Записей в блоге: 1 |
|
20.02.2012, 21:02 |
6 |
там, где вероятнее всего, ожидается ошибка
0 |
0 / 0 / 0 Регистрация: 27.03.2011 Сообщений: 24 |
|
20.02.2012, 21:53 [ТС] |
7 |
возможно файл открыт на чтение, а ты туда чота пытаешся записать иль чото подобное да нет, просто считываю
0 |
474 / 337 / 36 Регистрация: 31.05.2011 Сообщений: 1,156 |
|
20.02.2012, 23:51 |
8 |
ошибки вроде как не принято скрывать, их какбэ надо исправлять, еслиб выложил код, то ужеб наверно нашли ошибку и помоглиб чем смагли, а так испиши тут ещё пару страниц
0 |
deathNC 1904 / 1015 / 123 Регистрация: 08.12.2009 Сообщений: 2,792 Записей в блоге: 2 |
||||
21.02.2012, 00:04 |
9 |
|||
{$C+} и {$C-} — директивы проверки утверждений попробуй код заключить в директивы:
1 |
When I write code (and make mistakes in e.g. typing, or type mismatches)* the editor normally indicates immediately the problem. But now I have managed to switch this function off somehow. I need to compile/build the code to get the errors listed in the bottom screen, as usual.
I sometimes make use of this by deliberately putting a useless letter in a long code to quickly get back to that point later…By clicking on the spotted error message.
This probably a stupid issue no doubt, but I really would appreciate some help. Thanks.
Fred
In the Tools/Options the Formatter Profiles and Status tab the Enable Formatter is enabled.
Restarting Radstudio does not help.
Applies to all the code now.
asked Apr 9, 2019 at 13:41
3
The option you need is (in 10.3 Rio, may be slightly different in older versions):
Tools → Options → User Interface → Editor Options → Code Insight → [x] Error Insight
That should be set. You may want to play around with the other options on that tab as well.
answered Apr 9, 2019 at 13:51
Rudy VelthuisRudy Velthuis
28.4k5 gold badges46 silver badges94 bronze badges
3