Автоматический отладчик Windows запускается при завершении процесса для исключения точки останова

#windows #winapi #process #windbg #visual-studio-debugging

Вопрос:

У нас есть приложение для сбора дампа процесса и его настройки в ключе AeDebug reg для запуска при сбое процесса. Несколько раз он срабатывал для исключения точки останова и сбрасывал точки ниже стека вызовов.

 0:000> k
 # Child-SP          RetAddr               Call Site
00 0000001d`012df398 00007ffa`65d884f3     ntdll!NtTerminateProcess 0xa
01 0000001d`012df3a0 00007ffa`657734da     ntdll!RtlExitUserProcess 0xa3
02 0000001d`012df490 00007ffa`5c651cd5     kernel32!ExitProcessImplementation 0xa
03 0000001d`012df4c0 00007ffa`5c652304     mscoreei!RuntimeDesc::ShutdownAllActiveRuntimes 0x285
04 0000001d`012df7b0 00007ffa`5bd66398     mscoreei!CLRRuntimeHostInternalImpl::ShutdownAllRuntimesThenExit 0x14
05 0000001d`012df7e0 00007ffa`5bd662e1     clr!EEPolicy::ExitProcessViaShim 0x9c
06 0000001d`012df830 00007ffa`5bcbb936     clr!SafeExitProcess 0x9d
07 0000001d`012dfab0 00007ffa`5bd6a198     clr!HandleExitProcessHelper 0x3e
08 0000001d`012dfae0 00007ffa`657713f2     clr!EEShutDownProcForSTAThread 0x2318
09 0000001d`012dfb10 00007ffa`65d854f4     kernel32!BaseThreadInitThunk 0x22
0a 0000001d`012dfb40 00000000`00000000     ntdll!RtlUserThreadStart 0x34
 

~ команда в windbg показывает, что это единственный поток в дампе. И нет никаких управляемых исключений.

 0:000> !pe
There is no current managed exception on this thread

0:000> ~
.  0  Id: 18f4.b07c Suspend: -1 Teb: 00007ff7`24f90000 Unfrozen
 

Почему отладчик запускается для этого набора вызовов? Кто-нибудь еще видел то же самое?

Обновить:

 0:000> .exr -1
ExceptionAddress: 0000000000000000
   ExceptionCode: 80000003 (Break instruction exception)
  ExceptionFlags: 00000000
NumberParameters: 0

0:000> !avrf
Application verifier is not enabled for this process.
Use appverif.exe tool to enable it.

0:000> !gflag
Current NtGlobalFlag contents: 0x00000000

0:000> !gle
LastErrorValue: (Win32) 0x6 (6) - The handle is invalid.
LastStatusValue: (NTSTATUS) 0xc0000008 - An invalid HANDLE was specified.
 

Комментарии:

1. @ThomasWeller, я обновил вопрос с выводами этих 3 команд. но вывод !gle показывает, что произошла какая-то ошибка.

2. Спасибо, что уточнили вопрос. !gle результаты могут быть довольно старыми и не соответствовать проблеме, которую вы видите.

3. @devstability можете ли вы попробовать стандартный отладчик вместо вашего приложения, чтобы захватить дамп? Как procdump или windbg?