[英]analyse c# application dump file
我編寫了一個在XP上運行良好但在Vista / 7上凍結的C#應用程序。 我得到了一個應用程序轉儲(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的前幾章,向您展示了如何使用Windows調試工具 ,SOS調試器擴展(需要在此處使用本機調用映射托管代碼),它是的一部分。 NET SDK和SOSEX調試器擴展 ,它向SOS添加了兩個功能強大的擴展命令。
如果您以前從未使用過NTSD,WinDbg,SOS,或者相對虛擬地址一詞不為所動,我強烈建議您閱讀本書的第一章。 它只需要幾個小時的投資,突然之間就會為您打開一個全新的世界。 它並不會使調試變得輕而易舉(問題幾乎不會出現),但是它確實向您顯示了解決此類問題的正確方法。
恐怕只是看上面的垃圾堆並不能告訴我們太多。 如果您無法在Visual Studio中重現該錯誤,則NTSD或WinDbg是您的朋友。 從這里我唯一可以說的是您的入口點是mscoree.dll中的_CorExeMain。 但這是每個.NET程序集的引導程序。 稍后,將加載表單並執行一些代碼,但是究竟是什么呢? 沒有可執行文件,PDB,最好還有源文件,很難說出任何有用的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.