Необработанное исключение Win32 - PullRequest
3 голосов
/ 07 июля 2010

Во время выполнения, когда происходит сбой myApp.exe, я получаю «Необработанное исключение Win32», но как узнать, какое исключение произошло? где что-то пошло не так?

Ответы [ 4 ]

2 голосов
/ 07 июля 2010

Для родного приложения C ++ см. Мой предыдущий ответ здесь: Обнаружение / перенаправление дампов ядра (при сбое программного обеспечения) в Windows для перехвата необработанного исключения (которое также дает код для создания аварийного дампа, который вы можно использовать для анализа сбоя позже. Если сбой происходит в системе разработки, то в Visual Studio (я предполагаю, что вы используете это, если не у других IDE будет что-то похожее), в Отладке / Исключениях отметьте «Брошено» окно для «Win32 Exceptions».

1 голос
/ 07 июля 2010

Как правило, Windows также выдаст вам несколько шестнадцатеричных чисел. Скорее всего, код исключения будет 0xC0000005. Это код нарушения прав доступа. Когда это произойдет, у вас также будет три дополнительных бита информации: адрес нарушения, адрес нарушения и тип нарушения (чтение, запись или выполнение).

Windows не будет сужать это дальше, и часто это все равно не может. Например, если вы пройдете через конец массива в своей программе, Windows, вероятно, не поймет, что вы даже перебираете массив. Он просто видит «прочитано: ОК, прочитано: ОК, прочитано: вне границ => ошибка страницы => НАРУШЕНИЕ ДОСТУПА». Вы должны будете выяснить это по адресу, который нарушает (ваш код итерации массива), и по адресу с нарушением (адрес за пределами вашего массива).

0 голосов
/ 07 июля 2010

Используйте отладчик.Вы можете запустить программу и посмотреть, какое исключение выдает, что убивает ваше приложение.Это могло бы быть в состоянии точно определить местоположение броска.Я не использовал для этого отладчик VS, но в GDB вы можете использовать catch throw для принудительной установки точки останова при возникновении исключения, должно быть что-то подобное.

0 голосов
/ 07 июля 2010

Если это приложение .Net, вы можете попытаться добавить обработчик для события UnhandledException.Вы можете найти больше информации об этом и некоторый пример кода здесь .

В общем, это хороший признак того, что ваша обработка исключений нарушена, поэтому, возможно, стоит пройтись по коду и найти местаэто может бросить, но там, где вы не обрабатываете исключения.

...