Остановка на обрабатываемом исключении при отладке в Visual Studio
При запуске в режиме отладки приложения в окне вывода Visual Studio проскакивают сообщения вида:
Exception thrown at 0x00007FFB6CA74F69 in application.exe: Microsoft C++ exception: std::runtime_error at memory location 0x0000006C588FEFE0.
Программа при этом продолжает выполняться. Как можно найти место возникновения этого исключения?
Ответы (1 шт):
Программа продолжает выполняться, потому что:
- возникшее исключение обрабатывается в коде, т.е. есть соответствующий блок
try/catch, говорящий о том, что разработчик уже позаботился о проблеме; - остановка на исключениях указанного типа отключена в Visual Studio.
Несмотря на наличие обработчика исключения, ситуация с возникновением оного не обязательно является корректным поведением программы. Программа может стать лучше, если до исключения дело вовсе не будет доходить. В сложной программе не всегда очевидно, где и почему возникает соответствующее исключение. Чтобы найти место возникновения исключения достаточно выполнить любой из следующих пунктов:
Включить остановку на обрабатываемых исключениях.
Это делается через меню Debug → Windows → Exception Settings:
Где надо включить остановку на исключении нужного типа (или включить все, чтоб не ошибиться):
Добавить точку останова на данных по адресу указанному в сообщении (at memory location
0x0000006C588FEFE0)Это делается через меню Debug → New Breakpoint → Data Breakpoint...:
Меню доступно только в режиме паузы выполнения программы.
После продолжения запуска программы она будет остановлена при возникновении исключения. В случае с настройками исключений это будет нагляднее, т.к. код остановится непосредственно на нужном throw. В случае же с точкой останова на данных может потребоваться пройтись по стеку для нахождения первопричины.



