C ++ - аварийный дамп, разматывание стека при исключениях Win32 (когда используется catch (...)) - VS 2003 - PullRequest
1 голос
/ 25 февраля 2010

Как и в случае отладки Just In Time, скомпилированные VS 2003 приложения перехватывают Win32 (или асинхронные) исключения в catch (...) и разматывают стек? перед записью файла дампа ...

Ответы [ 2 ]

1 голос
/ 25 февраля 2010

Нет, вызов отладчика создается в коде, который запускает стек из исключения, поэтому стек еще не размотан. Это верно как для исключения sync (C ++), так и async (OS).

См. Рис. 13 в известной статье MSJ Ускоренный курс по глубине структурированной обработки исключений Win32 ™ .

Фильтр необработанных исключений вызывается после первого прохода списка фильтров исключений, если не принят фильтр, который готов обработать исключение. Этот первый проход перед размоткой, которая происходит на втором проходе. Если вы вломитесь в отладчик, когда вам будет предоставлена ​​возможность, вы найдете свое исключительное место вниз вашего стека, и это имеет смысл: для отладки стека, который уже размотан, практически ничего не будет стоить не знал бы, что пошло не так.

0 голосов
/ 25 февраля 2010

Это зависит от семантики раскрутки стека , выбранной при компиляции вашего приложения Компилятору может быть дано указание перехватывать или не перехватывать исключения SEH для вашего кода. Код запуска всегда перехватывает исключения C ++ и SEH и, если обнаруживается какое-либо исключение, закрывает приложение.

...