Windows 自动调试器在 TerminateProcess 上触发断点异常

问题描述

我们有一个应用程序来收集进程转储,并将其配置在 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.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)