Как проанализировать необработанное исключение, пойманное VS2010 в режиме отладки? - PullRequest
1 голос
/ 01 марта 2012

Моя программа на C ++ выдает исключение, которое не обрабатывается в программе, поэтому в режиме отладки VS обрабатывает его, показывая окно о том, что произошло необработанное исключение.Но могу ли я просмотреть это исключение, которое не обрабатывается?Каков его тип, что находится внутри объекта?

Ответы [ 3 ]

3 голосов
/ 01 марта 2012

Вы можете попробовать нажать Break и войти в игру.Если есть что-то, что нужно проанализировать в коде, VS перейдет в обработчик или конструктор класса исключений.Во всяком случае, так было в VS2010.

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

PS У вас может быть своя собственная необработанная процедура исключения, чтобы установить точку останова внутри нее.Может быть простым:

// global scope
    LONG WINAPI my_unh_exc_hndlr(_EXCEPTION_POINTERS* excPtrs)
    {
        return EXCEPTION_CONTINUE_SEARCH; // Put a breakpoint here in IDE.
    }

// ... somewhere in the beginning of main()
    SetUnhandledExceptionFilter(my_unh_exc_hndlr);

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

Другая программа случайно падает?Источник недоступен?Нет проблем.Внедрить код (небольшая DLL), который устанавливает для вас подпрограмму обработчика (если у вас нет меньших привилегий), и выполнить отладку.

0 голосов
/ 01 марта 2012

Если вы не видите всю информацию об исключении, вы можете проверить настройки отладки в Visual Studio. Перейдите в меню «Отладка» и нажмите «Исключения». Оттуда вы можете разбить все исключения. Это должно привести к сбою отладчика как можно скорее при возникновении исключения.

0 голосов
/ 01 марта 2012

В большинстве случаев, когда возникает исключение, Visual Studio должна вызвать диалоговое окно с возможностью разбить вашу программу, позволяя вам увидеть, где это произошло в вашем коде. Кроме того, вы должны иметь возможность анализировать значения объектов, указателей и еще чего-то прямо перед тем, как возникнет исключение. Этого должно быть достаточно, чтобы получить представление о том, что происходит не так (если только вы не имеете дело с кучей коррупции или чем-то подобным). Трудно сказать больше, не зная специфики самого исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...