我有一个编写的应用程序间歇性崩溃,但是我无法在应用程序层捕获异常。我总是在事件日志中得到一个条目,但没有给我太多信息:
btn.DisplayIndex = 1;
如您所见,我得到了:
故障模块路径:C:\ WINDOWS \ SYSTEM32 \ ntdll.dll。
我不确定那是什么或与崩溃有关,但是我已经能够在多台机器上重现它,而如何确定原因或防止它的发生我却一头雾水。
更新:由于上述原因,我到了启动时应用程序崩溃的地步。它到达MainWindow构造函数(它是WPF应用程序)的末尾,在白屏上停留约10秒钟,然后死去。我已回滚到该软件的旧版本,并重现了此行为。我也将其移至另一台计算机上,但未发现此行为,因此我的当前理论与注释中的说法相符-某些内容破坏了堆,并且仅在重新启动后才被清除。
更新2:在调试器外部运行时,我能够产生此错误消息,尽管在调试器中运行时,我无法使它停止于异常:
GDI +中发生了一般性错误
这就是我今天要狩猎的东西。有趣且令人不安的是,该应用程序每次启动时都会崩溃,即使在重新启动后也是如此。目前在其他计算机上不会发生相同的行为。
答案 0 :(得分:4)
要调试此类系统内部问题,建议您尝试Process monitor
Process Monitor是Windows的高级监视工具,可显示实时文件系统,注册表和进程/线程活动。
基本上,您需要寻找“ NAME NOT FOUND”错误,这意味着缺少dll或注册表项,或者在监视器屏幕中存在任何其他可疑错误。
答案 1 :(得分:1)
上次我的应用程序发生类似崩溃时,指出ntdll.dll是故障模块,实际上是我自己的代码存在内存泄漏。我对未分配内存的字符串执行了strcpy。像
char * str;
strcpy(str, "Hello");
在我的代码经过艰苦的遍历之后,我发现了这一点。
检查代码是否泄漏。