0

我有一个在 Azure 云服务中运行的控制台应用程序,它随机崩溃,因此我开始使用依赖项遍历器对其进行分析,以查看是否可以获得更多信息。

这是一个托管代码控制台应用程序,但它加载了第 3 方非托管代码,这是崩溃的部分,它只是关闭控制台而没有任何信息为什么。

当我使用依赖walker运行它时,我无法让它崩溃,控制台应用程序在它作为依赖walker中的配置应用程序运行并运行它的上下文中会有什么不同?

更新

我能够在事件查看器中找到一些信息。

Faulting application name: runner.exe, version: 1.0.0.0, time stamp: 0x539fe538
Faulting module name: ntdll.dll, version: 6.3.9600.17114, time stamp: 0x53649e73
Exception code: 0xc0000374
Fault offset: 0x00000000000f87a8
Faulting process id: 0xdf8
Faulting application start time: 0x01cf8a16e42e087f
Faulting application path: D:\Users\pksorensen\Desktop\Release\runner.exe
Faulting module path: D:\Windows\SYSTEM32\ntdll.dll
Report Id: 3a46b49a-f60a-11e3-80bb-00155d871170
Faulting package full name: 
Faulting package-relative application ID: 
4

1 回答 1

0

0xc000374 错误代码意味着堆损坏,这是一个特别难以尝试调试的问题。通常,当托管代码将对象或内存地址传递到非托管代码中并且托管代码未固定内存或非托管代码具有覆盖它不拥有的内存的错误时,会导致此问题。您应该检查所有托管到非托管转换的代码,并确保正确处理内存和对象引用。对于故障排除,您可以从应用程序验证程序开始,在Why is ntdll.dll crashing my c++ executable? .

如果这没有帮助,那么您将需要启用 Pageheap,然后附加一个调试器来查找第一次机会异常。有几个博客可以帮助完成此步骤,但正如您所见,故障排除并非易事。

于 2014-06-17T16:51:32.693 回答