我有一个我写的应用程序间歇性崩溃,但我无法在应用程序层捕获异常。我总是在事件日志中输入一个条目但是没有给我太多信息:
Faulting application name: BCS-UI.exe, version: 1.0.11.0, time stamp: 0x5c0edcbd
Faulting module name: ntdll.dll, version: 10.0.17134.376, time stamp: 0x4358e406
Exception code: 0xc0000374
Fault offset: 0x000d8829
Faulting process id: 0x39b0
Faulting application start time: 0x01d49161c80079a0
Faulting application path: C:\Gogs Local\SMR_Windows_UI\BCS-UI\BCS-UI\bin\Release\BCS-UI.exe
Faulting module path: C:\WINDOWS\SYSTEM32\ntdll.dll
Report Id: 1fbc4761-d256-44b0-99b0-4d9d758e4fe0
Faulting package full name:
Faulting package-relative application ID:
- System
- Provider
[ Name] Application Error
- EventID 1000
[ Qualifiers] 0
Level 2
Task 100
Keywords 0x80000000000000
- TimeCreated
[ SystemTime] 2018-12-11T15:12:28.109191000Z
EventRecordID 23318
Channel Application
Computer Leviathan
Security
- EventData
BCS-UI.exe
1.0.11.0
5c0edcbd
ntdll.dll
10.0.17134.376
4358e406
c0000374
000d8829
39b0
01d49161c80079a0
C:\Gogs Local\SMR_Windows_UI\BCS-UI\BCS-UI\bin\Release\BCS-UI.exe
C:\WINDOWS\SYSTEM32\ntdll.dll
1fbc4761-d256-44b0-99b0-4d9d758e4fe0
如你所见,我明白了:
错误模块路径:C:\ WINDOWS \ SYSTEM32 \ ntdll.dll。
我不确定它是什么或者它与崩溃有什么关系,但我已经能够在多台机器上重现它,我不知道如何确定原因或防止它发生。
更新:由于上述原因,我已经达到应用程序在启动时崩溃的程度。它到达MainWindow构造函数的末尾(它是一个WPF应用程序),在白色屏幕上停留大约10秒然后死掉。我已回滚到旧版本的软件并重现了这种行为。我也把它移到了另一台机器上并没有看到这种行为,所以我现在的理论与评论中所说的一致 - 有些东西破坏了堆,它只会在重新启动时被清除。
更新2:我可以在调试器外部运行时生成此错误消息,但在调试器中运行时,我无法让它停止异常:
GDI +中发生了一般错误
这就是我今天要打的东西。令人感兴趣和令人不安的是,即使在重新启动后,应用程序每次启动时都会崩溃。此时在其他计算机上不会发生相同的行为。
为了调试这些系统内部问题,我建议你试试Process monitor
Process Monitor是Windows的高级监视工具,可显示实时文件系统,注册表和进程/线程活动。
基本上你需要注意“NAME NOT FOUND”错误,这意味着缺少dll或注册表项,或者监视器屏幕中的任何其他可疑错误。
我最后一次在我的应用程序中遇到类似的崩溃,指向ntdll.dll作为错误模块,现实是我自己的代码有内存泄漏。我对没有分配内存的字符串做了strcpy。就像是,
char * str;
strcpy(str, "Hello");
经过我的代码的艰苦演练后,我发现了这一点。
检查代码是否泄漏。