2010-07-11 28 views
5

Tôi đã viết một ứng dụng C# đang chạy tốt trên XP nhưng đóng băng trên Vista/7. Tôi nhận được một ứng dụng dump (dmp file) để phân tích vấn đề. Tôi không hiểu làm thế nào để có được dấu vết ngăn xếp trong C# (như tôi có tất nhiên mã nguồn). Tôi đã tải các ký hiệu nhưng dường như không tải mã được quản lý, đây là dấu vết ngăn xếp:phân tích tệp kết xuất ứng dụng 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 

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

5

Phân tích tệp kết xuất không dành cho những người yếu tim và đòi hỏi một chút tập thể dục. Giới thiệu tuyệt vời là một vài chương đầu tiên của Advanced .NET Debugging cho bạn biết cách sử dụng the Debugging Tools for Windows, phần mở rộng trình gỡ lỗi SOS (yêu cầu ánh xạ mã được quản lý với các cuộc gọi gốc) mà bạn cần ở đây) là part of the .NET SDKSOSEX debugger extension. lệnh để SOS.

Nếu bạn chưa bao giờ sử dụng NTSD, WinDbg, SOS trước hoặc nếu các cụm từ là Địa chỉ ảo tương đối không đổ chuông, tôi khuyên bạn nên đọc các chương đầu tiên của cuốn sách này. Nó đòi hỏi đầu tư chỉ vài giờ và tất cả của một thế giới hoàn toàn mới mở ra cho bạn. Nó không thực hiện gỡ lỗi một cách dễ dàng (nó hầu như không bao giờ là khi các vấn đề phức tạp) nhưng nó cho bạn thấy con đường đúng đắn để giải quyết vấn đề này.

Chỉ cần nhìn vào bãi chứa ở trên không cho chúng tôi biết nhiều, tôi sợ. Nếu bạn không thể tạo lại lỗi từ bên trong Visual Studio, NTSD hoặc WinDbg là bạn của bạn. Điều duy nhất tôi có thể nói từ đây là điểm vào của bạn là _CorExeMain từ mscoree.dll. Nhưng đó là bootstrap của mọi assembly .NET. Sau đó, một biểu mẫu được tải và một số mã được thực thi, nhưng chính xác thì sao? Nếu không có tệp thực thi của bạn, PDB và tốt nhất là các tệp nguồn của bạn, thật khó để nói bất cứ điều gì hữu ích.

Các vấn đề liên quan