Анализ сбоев: CxxUnhandledExceptionFilter

У меня есть аварийный мини-дамп для анализа. Моя программа является многопоточным приложением Qt5. Я не гуру отладки, но обычно я легко могу найти место, где программа провалилась, но на этот раз я не могу. Я открыл файл дампа в Visual Studio 2010, нажал «Отладка только с собственным», и он показывает мне, где проблема: это поток с расположением «__CxxUnhandledExceptionFilter». Стек вызовов выглядит так:

msvcr100.dll()!_abort()
msvcr100.dll()!terminate()
program.exe!__CxxUnhandledExceptionFilter(_EXCEPTION_POINTERS * pPtrs)
KERNELBASE.dll!_UnhandledExceptionFilter()
ntdll.dll!__RtlUserThreadStart()
ntdll.dll!__RtlUserThreadStart()

Я ожидал увидеть стек с программными функциями и внутренними функциями Qt. Но этот стек вызовов не говорит мне ничего интересного. Поэтому, пожалуйста, скажите мне, что такое «ExceptionFilter» и как я могу найти место, где программа действительно потерпела неудачу?

3

Решение

Вы просматриваете приложение в точке, где необработанное исключение уже было обнаружено фильтром исключений по умолчанию.

То есть вы не видите линию, где произошло исключение.

К сожалению, это означает, что мини-дамп, вероятно, не содержит полезной информации.

Вы можете попробовать осмотреть _EXCEPTION_POINTERS структуры, он может содержать EIP инструкции, которая вызвала необработанное исключение.

Смотрите значение pPtrs->ExceptionRecord->ExceptionAddress, что должно держать EIP,

Из MSDN:

ExceptionAddress: адрес, где произошло исключение.

Чтобы получить трассировку стека в точке, где произошло исключение, прочитайте http://support.microsoft.com/kb/313109.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]