我编写的一个应用程序间歇性崩溃,但我无法在应用层捕获异常。我总是在事件日志中得到一个条目,但没有给予太多信息:
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\系统32\ntdll.dll文件中找到的。
我不知道这是什么,也不知道它与崩溃有什么关系,但我已经能够在多台机器上重现它,我不知道如何确定原因或防止它发生。
更新:由于上述原因,我已经达到了应用程序在启动时崩溃的程度。(这是一个WPF应用程序),在那里坐了大约10秒,在一个白色的屏幕上,然后死亡。我已经回滚到旧版本的软件,并重现了这种行为。我也把它移动到另一台机器,没有看到这种行为,所以我目前的理论与评论中所说的是一致的--有些东西破坏了堆,只有在重新启动时才能清除。
更新2:当在调试器外部运行时,我能够产生以下错误消息,尽管当在调试器中运行时,我不能使它在异常时停止:
GDI+中发生一般错误
这就是我今天要找的。有趣又令人不安的是,这款应用每次启动时都会崩溃,甚至在重启后也是如此。同样的行为目前不会在其他机器上发生。
3条答案
按热度按时间klr1opcd1#
要调试这类系统内部问题,我建议您尝试Process Monitor。
进程监视器是一种用于Windows的高级监视工具,可显示实时文件系统、注册表和进程/线程活动。
基本上,您需要寻找“名称未找到”错误,这意味着丢失dll或注册表项,或任何其他可疑的错误在显示器屏幕上。
scyqe7ek2#
上一次我的应用程序出现类似的崩溃,指出ntdll.dll是错误模块,实际情况是我自己的代码有内存泄漏。我对一个没有分配内存的字符串执行了strcpy。类似于:
我在对我的代码进行了一次艰苦的演练后发现了这一点。
检查代码是否存在泄漏。
vngu2lb83#
对于那些有类似的问题,只得到这个错误,但没有其他:
执行了断点指令(__debugbreak()语句或类似调用)
尝试更新解决方案中的NuGet包。
当我更新了一些微软软件包后,那个神秘的错误就不再发生了。