2010-07-11 7 views
5

Ho scritto un'applicazione C# che funziona bene su XP ma si blocca su Vista/7. Ho ottenuto un dump dell'applicazione (file dmp) per analizzare il problema. Non capisco come ottenere la traccia dello stack in C# (come ho ovviamente il codice sorgente). ho caricato i simboli, ma non sembra per caricare codice gestito, ecco l'analisi dello stack:analizzare il file di scarico dell'applicazione 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 

Qualsiasi aiuto sarebbe apprezzato.

risposta

5

L'analisi dei file di dump non è per i deboli di cuore e richiede un po 'di esercizio. Un'introduzione eccellente sono i primi capitoli di Advanced .NET Debugging che mostra come usare the Debugging Tools for Windows, l'estensione debugger di SOS (necessaria per mappare il codice gestito con le chiamate native, che qui richiedono) che è part of the .NET SDK e lo SOSEX debugger extension che aggiunge un paio di potenti estensioni comandi a SOS.

Se non hai mai usato NTSD, WinDbg, SOS prima o se i termini come indirizzo virtuale relativo non suonano, ti consiglio caldamente di leggere i primi capitoli di questo libro. Richiede un investimento di poche ore e all'improvviso ti si apre un mondo completamente nuovo. Non rende il debug un gioco da ragazzi (non è quasi mai quando i problemi sono complessi) ma mostra la strada giusta da seguire per affrontare questo tipo di problemi.

Solo guardare la discarica di cui sopra non ci dice molto, ho paura. Se non riesci a riprodurre l'errore da Visual Studio, NTSD o WinDbg è tuo amico. L'unica cosa che posso dire è che il tuo punto di ingresso è _CorExeMain di mscoree.dll. Ma questo è il bootstrap di ogni assembly .NET. Successivamente, viene caricato un modulo e viene eseguito un codice, ma cosa esattamente? Senza il tuo eseguibile, il PDB e preferibilmente anche i tuoi file sorgente, sarà difficile dire qualcosa di utile.