与ntdll.dll相关的无法解释的崩溃

时间:2018-12-11 15:24:25

标签: c# windows dll ntdll

我有一个编写的应用程序间歇性崩溃,但是我无法在应用程序层捕获异常。我总是在事件日志中得到一个条目,但没有给我太多信息:

btn.DisplayIndex = 1;

如您所见,我得到了:

  

故障模块路径:C:\ WINDOWS \ SYSTEM32 \ ntdll.dll。

我不确定那是什么或与崩溃有关,但是我已经能够在多台机器上重现它,而如何确定原因或防止它的发生我却一头雾水。

更新:由于上述原因,我到了启动时应用程序崩溃的地步。它到达MainWindow构造函数(它是WPF应用程序)的末尾,在白屏上停留约10秒钟,然后死去。我已回滚到该软件的旧版本,并重现了此行为。我也将其移至另一台计算机上,但未发现此行为,因此我的当前理论与注释中的说法相符-某些内容破坏了堆,并且仅在重新启动后才被清除。

更新2:在调试器外部运行时,我能够产生此错误消息,尽管在调试器中运行时,我无法使它停止于异常:

  

GDI +中发生了一般性错误

这就是我今天要狩猎的东西。有趣且令人不安的是,该应用程序每次启动时都会崩溃,即使在重新启动后也是如此。目前在其他计算机上不会发生相同的行为。

2 个答案:

答案 0 :(得分:4)

要调试此类系统内部问题,建议您尝试Process monitor

  

Process Monitor是Windows的高级监视工具,可显示实时文件系统,注册表和进程/线程活动。

enter image description here

基本上,您需要寻找“ NAME NOT FOUND”错误,这意味着缺少dll或注册表项,或者在监视器屏幕中存在任何其他可疑错误。

答案 1 :(得分:1)

上次我的应用程序发生类似崩溃时,指出ntdll.dll是故障模块,实际上是我自己的代码存在内存泄漏。我对未分配内存的字符串执行了strcpy。像

char * str;
strcpy(str, "Hello");

在我的代码经过艰苦的遍历之后,我发现了这一点。

检查代码是否泄漏。