2010-07-11 152 views
5

我寫了一個在XP上運行良好但在Vista/7上凍結的C#應用​​程序。 我得到了一個應用程序轉儲(dmp文件)來分析問題。 我不明白如何獲得在C#中的堆棧跟蹤(因爲我當然有源代碼)。 我裝的符號,但它似乎並沒有加載託管代碼,這裏是堆棧跟蹤:分析c#應用程序轉儲文件

[email protected]() 
[email protected]() + 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() 
[email protected]() + 0x33 bytes  
[email protected]() + 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 
[email protected]() + 0x98 bytes 
mscoreei.dll!71f455ab()  
[email protected]() + 0x227 bytes 
[email protected]() + 0x8 bytes 
[email protected]@12() + 0x12 bytes  
[email protected]() + 0x27 bytes 
[email protected]() + 0x1b bytes 

任何幫助,將不勝感激。

回答

5

分析轉儲文件不適合心臟不好,需要一點鍛鍊。一個很好的介紹是Advanced .NET Debugging第幾章展示瞭如何使用the Debugging Tools for Windows,該SOS調試器擴展是part of the .NET SDK(映射與本地通話,你需要在這裏進行管理規範要求),並且增加了一些強大的擴展的SOSEX debugger extension命令SOS。

如果您從未使用過NTSD,WinDbg中,SOS之前,或者如果條款相對虛擬地址不按門鈴,我強烈建議你閱讀這本書的第一章。它只需要幾個小時的投資,突然間就會爲你開啓一個全新的世界。它不會使調試變得輕而易舉(問題很複雜時幾乎不會發生),但它確實爲您解決這類問題提供了正確的途徑。

只看轉儲上面並沒有告訴我們很多,我怕。如果您無法從Visual Studio中重現錯誤,則NTSD或WinDbg是您的朋友。我能從這裏得知的唯一信息就是你的入口點是mscoree.dll中的_CorExeMain。但這是每個.NET程序集的引導。後來,一個表單被加載,一些代碼被執行,但究竟是什麼?沒有你的可執行文件,PDB,最好還有你的源文件,很難說出任何有用的東西。