c# - 分析 C# 应用程序转储文件

标签 c# analysis dump dmp

我写了一个 C# 应用程序,它在 XP 上运行良好,但在 Vista/7 上却死机了。 我得到了一个用于分析问题的应用程序转储(dmp 文件)。 我不明白如何在 C# 中获取堆栈跟踪(因为我当然有源代码)。 我加载了符号,但它似乎没有加载托管代码,这是堆栈跟踪:

ntdll.dll!_KiFastSystemCallRet@0()  
user32.dll!_NtUserWaitMessage@0()  + 0xc bytes  
System.Windows.Forms.ni.dll!68bb8ea8()  
[Frames below may be incorrect and/or missing, no symbols loaded for System.Windows.Forms.ni.dll]   
System.Windows.Forms.ni.dll!68bb8ea8()  
System.Windows.Forms.ni.dll!68bb8997()  
System.Windows.Forms.ni.dll!68bb87e1()  
System.Windows.Forms.ni.dll!68b75931()  
mscorwks.dll!_CallDescrWorker@20()  + 0x33 bytes    
mscorwks.dll!_CallDescrWorkerWithHandler@24()  + 0x9f bytes 
mscorwks.dll!MethodDesc::CallDescr()  + 0x15a bytes 
mscorwks.dll!MethodDesc::CallTargetWorker()  + 0x1f bytes   
mscorwks.dll!MethodDescCallSite::CallWithValueTypes_RetArgSlot()  + 0x1a bytes  
mscorwks.dll!ClassLoader::RunMain()  - 0x39040 bytes    
mscorwks.dll!Assembly::ExecuteMainMethod()  + 0xa4 bytes    
mscorwks.dll!SystemDomain::ExecuteMainMethod()  + 0x416 bytes   
mscorwks.dll!ExecuteEXE()  + 0x49 bytes 
mscorwks.dll!__CorExeMain@0()  + 0x98 bytes 
mscoreei.dll!71f455ab()     
mscoree.dll!_ShellShim__CorExeMain@0()  + 0x227 bytes   
mscoree.dll!__CorExeMain_Exported@0()  + 0x8 bytes  
kernel32.dll!@BaseThreadInitThunk@12()  + 0x12 bytes    
ntdll.dll!___RtlUserThreadStart@8()  + 0x27 bytes   
ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes

如有任何帮助,我们将不胜感激。

最佳答案

分析转储文件不适合胆小的人,需要一些练习。一个很好的介绍是前几章 Advanced .NET Debugging它向您展示了如何使用 the Debugging Tools for Windows ,SOS 调试器扩展(需要将托管代码映射到 native 调用,这是您在此处需要的),它是 part of the .NET SDKSOSEX debugger extension它为 SOS 添加了几个强大的扩展命令。

如果您以前从未使用过 NTSD、WinDbg、SOS,或者如果 Relative Virtual Address 等术语不熟悉,我强烈建议您阅读本书的第一章。它只需要几个小时的投资,突然间一个全新的世界就会为你打开。它不会使调试变得轻而易举(当问题很复杂时几乎不会如此),但它确实向您展示了解决此类问题的正确途径。

恐怕只看上面的转储并不能告诉我们太多信息。如果您无法从 Visual Studio 中重现错误,NTSD 或 WinDbg 是您的 friend 。我从这里唯一可以看出的是,您的入口点是 mscoree.dll 中的 _CorExeMain。但这是每个 .NET 程序集的 Bootstrap 。稍后,加载了一个表单并执行了一些代码,但具体是什么?如果没有您的可执行文件、PDB 以及最好还有您的源文件,就很难说出任何有用的信息。

关于c# - 分析 C# 应用程序转储文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3223021/

相关文章:

c# - 有没有办法删除单个实体的更改跟踪机制?

python - 如何使用 Python 构建基于时间戳发生的序列?

c# - 如何使用 ADB2C 实现身份验证端点

c# - 哪个集合类对于在 C# 中插入是有效的

c++ - C语言蓝牙paquet分析

Postgresql 转储/恢复列

SVN 转储大小 : is it possible to reduce it?

python - 使用 python 将十六进制转储到 YAML

c# - Objective-C 等效于 C# 中的 'as' 运算符

algorithm - 该算法的最坏情况运行时间(如何证明)?