Перерыв в Visual Studio при выходе из процесса

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

Я пытался установить std::atexit функция, но это не получает удар. Я также пытался переопределить SetUnhandledExceptionFilter, в случае, если это вызвано сбоем, и это также не получает удар. В проекте отключены исключения (#define _HAS_EXCEPTIONS=0), поэтому я не могу позвонить std::set_terminate или же std::set_unexpected,

Есть ли какой-то другой способ определить, что является причиной выхода из процесса? Какой-то вариант, чтобы сломаться в отладчике, когда процесс собирается завершиться?

2

Решение

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

Если вы не увидите там ничего интересного, это означает, что ваше приложение называется ExitProcess / ExitThread / exit или, что еще хуже, TerminateProcess / TerminateThread / _exit.

Вы можете поставить точки останова на них. Установите точку останова при запуске, запустите отладчик. Убедитесь, что у вас есть отладочные символы, загруженные для соответствующих DLL, kernel32.dll для ExitProcess и друзей, некоторые другие DLL для выхода, например, ucrtbase.dll. Нажмите «Новая / Точка останова функции», введите, например, «ExitProcess», нажмите ОК.

4

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

Вы также можете попробовать использовать инструмент gflags из Windows SDK.

Если вы обнаружите (прочитав «Журналы Windows> Приложение») причину самопроизвольного выхода, вы можете проверить «Включить сбор дампов» в gflags, тогда вы сможете загрузить дамп в WinDBG и получить полный стек вызовов, сообщающий вам кто назвал что.

К сожалению, последняя версия инструмента сломанный не поддающийся ремонту.

Но вы можете установить более старый Windows SDK. Оттуда вам нужны только «Средства отладки для Windows», нет необходимости устанавливать полный SDK.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector