![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Exception dll
Gu © (2012-01-08 03:28:00)можно ли в длл сделать свой обработчик ошибок, типа как Application.OnException?
Gu (2012-01-08 15:25:00) [1]понятно
Dimka Maslov (2012-01-08 15:23:00) [2]
> Gu (08.01.12 15:16) [9]
После компиляции имён функций и переменных уже не существует. Существует лишь map-файл, показывающий по какому адресу находятся функции, а также сопоставление строк исходного текста с внутренними адресами. Адрес исключения показывается именно для того, что человек, занимающийся отладкой, посмотрел туда дабы найти место ошибки.
> Rouse_ © (08.01.12 15:17) [10]
Если очень захотеть, синий экран можно просто нарисовать:)
Rouse_ (2012-01-08 15:17:00) [3]
> Dimka Maslov © (08.01.12 15:02) [5]
> Бездумное (а в нашем случае оно именно такое) использование
> такого подхода может полностью убить всю обработку исключений
> в рамках процесса. Или вообще закончиться синим экраном.
Ну, синим экраном - это ты, конечно, переборщил, а по по поводу обработки исключений, если ты про отказ работы SEH - то конечно, ибо VEH именно для этого собственно и был создан :)
Gu (2012-01-08 15:16:00) [4]еще такой вопрос - тут:
> и в except вызвать одну и ту же процедуру.
> except
> on E: Exception do
> HandleException(E);
в HandleException можно както получить имя процедуры (без явной передачи в качестве параметра), где возникло исключение?
Gu (2012-01-08 15:14:00) [5]ясно
_Юрий (2012-01-08 15:06:00) [6]Если вы хотите, чтобы исключения проходили из библиотеки в хост прозрачно, компилируйтесь с ран-тайм пакетами, все будет проходить.
(Судя по [3], проблемы использования разных языков не предполагается).
Второй вариант - обернуть все экспортируемые функции в try-except
и в except вызвать одну и ту же процедуру.
except
on E: Exception do
HandleException(E);
Экспортируемых функций будет не так много, и это намного быстрее и проще, чем лезть в дебри системы, где вы еще и наверняка накосячите
Dimka Maslov (2012-01-08 15:03:00) [7]
> а это почему плохо
Вообще-то это единственное правильное решение.
Dimka Maslov (2012-01-08 15:02:00) [8]
> Rouse_ © (08.01.12 14:46) [2]
Бездумное (а в нашем случае оно именно такое) использование такого подхода может полностью убить всю обработку исключений в рамках процесса. Или вообще закончиться синим экраном.
> Gu (08.01.12 14:54) [3]
Разберись сначала как и где работает Application.OnException, и что это вообще такое.
> такое будет работать
Что мешает проверить, что такое работать не будет?
Gu (2012-01-08 15:01:00) [9]
> можно в каждую функцию вставить try..except
а это почему плохо? Ну скажем не в каждую, но в потенциально опасные можно?
Gu (2012-01-08 14:54:00) [10]а если передать в длл хендл аппликатион, там приравнять его местному и навестить обработчик онехсцептион - такое будет работать?
Rouse_ (2012-01-08 14:46:00) [11]AddVectoredExceptionHandler() и проверять EXCEPTION_RECORD->ExceptionAddress.
Если ошибка не в недрах твоей библиотеки, то вертай EXCEPTION_CONTINUE_EXECUTION.
Правда исключения во внешних библиотеках при вызове функции твоей так не определишь - но тут можно зачитывать стэк вызовов, и проверять проходит ли он через твою библиотеку.
Dimka Maslov (2012-01-08 11:37:00) [12]Исключения в dll передаются вызывающей программе, где и обрабатываются. Ну а если опять уже очень хочется [censored] можно в каждую функцию вставить try..except