Здравствуйте AliBaba, Вы писали:
AB>Привет, может кто думал нат тем, можно ли, поймав exception, распечатать стек и указать место в сорсе, где exception случился?
Здравствуйте AliBaba, Вы писали:
AB>Привет, может кто думал нат тем, можно ли, поймав exception, распечатать стек и указать место в сорсе, где exception случился?
Читай "Отладка приложений" by John Robbins, и/или колонку Bygslayer в Microsoft Systems Journal. Там и там развивается по ходу пьесы BugslayerUtil.dll, в которой это дело реализовано на все случаи жизни. В частности, функции GetFaultReason, GetFirst/NextStackString дают исчерпывающую информацию о причине сбоя и адресах, а также печатают стек. Есть возможность запоминания первых 4-х параметров всех функций (адресов). Также, поработав с кодом (если хочется изобретать велосипед, или разобраться поконкретнее), можно узнать, как все это делается своими руками.
Идея следующая:
Перекрывается обработчик необработанных исключений с помощью SetCrashHandlerFilter(), и новая функция-обработчик вызывает функции из этой dll, а дальше — хочешь, в лог, еще куда. У меня реализовано. Оч помогает.
Эту же функцию можно и в тех местах, где обработка есть, как exception filter, чтоб все то же самое выводить автоматом, когда исключение отловлено.
Здравствуйте Kaa, Вы писали:
Kaa>Здравствуйте AliBaba, Вы писали:
AB>>Привет, может кто думал нат тем, можно ли, поймав exception, распечатать стек и указать место в сорсе, где exception случился?
Kaa>Bygslayer
Bugslayer, конечно.
Если хочешь сам, то начни с функции SymInitialize и дальше по всем темам.
Здравствуйте AliBaba, Вы писали:
AB>Привет, может кто думал нат тем, можно ли, поймав exception, распечатать стек и указать место в сорсе, где exception случился?
Kaa уже написал про книгу Роббинса, вот один из двух известных мне вариантов ее издания на русском языке Отладка приложений (+ CD-ROM). Второй вариант называется типа "Отладка Windows приложений", но автор и исходная книга таже. Так вот на прилагаемом сидюке есть программа, которая позволяет делать то, что тебе нужно.