Domanda

Ho un'applicazione di Windows Forms (.NET 4) che funziona bene sulla mia macchina di sviluppo, ma si blocca su due altre macchine di prova.Posso caricare il minidump che crea in VS2010.

Scelta di "debug with misto" conduce a quanto pare infinito (ho ucciso Devenv dopo circa 20 minuti) Abuso della CPU da Visual Studio.

Quando "Debug con nativo solo", non riesce a trovare la fonte (anche se ho rispecchiato la fonte nella stessa cartella della macchina del test).Dice semplicemente:

.

Eccezione non gestita a 0x793F5B8C in yourwinapp .exe.hdmp: 0xc0000409: 0xc0000409.

e poi mi mostra

.

Call Stack Ubicazione: CLR.DLL! 793F5B8C ()

Come scoprirei cosa sta causando l'arresto anomalo?Posso prendere un incidente completo mentre viene visualizzata la finestra di dialogo "Notifica Microsoft" e questo aiuto?

È stato utile?

Soluzione

Il debug del minidump avrebbe dovuto essere notevolmente migliorato in VS2010. Non ho visto molte prove per questo ancora, il debug di modalità mista sembra imbarazzante come prima quando avevo fatto alcuni test rapidi. Non prendere la mia parola però però. Tuttavia, non ti mostrerà mai uno stack di chiamata gestito.

Affronta questo alla fonte. Scrivi un gestore di eventi per appdomain.currentDomain.unhandledException e registralo nel tuo metodo principale (). Lascia che mostra il valore di e.exceptionObject.tostring () in, ad esempio, una finestra di messaggio. Questo ti fa la traccia della pila gestita dell'eccezione. Mentre viene visualizzata quella casella dei messaggi, potresti anche scattare il minidump, dovrebbe avvicinarti alla posizione di crash.

L'eccezione particolare che stai ottenendo è comunque sicuramente indicando il codice C / C ++ nativo. Un buffer overflow che sta corrompendo la pila. Assicurati di avere i file .pdb per qualsiasi codice nativo utilizza la tua app. E configura il server Microsoft Symbol in modo da ottenere una buona traccia di pila nativa dal minidump.

Modifica: il fatto che non si ottiene non viene sollevato un avvolgimento in modo sicuramente punti per impilare l'integrità controllando il CRT. È stato progettato per non solleva un'eccezione ma termini immediatamente il programma. Comportamento necessario perché lo stack è compromesso, il codice non può assumere che possa essere srotolato in modo sicuro. Data la posizione di crash, è probabile che questo assegno sia effettivamente fatto nel codice CLR. So che questo non è stato fatto nelle precedenti versioni CLR ma potrebbe essere diverso nella versione CLR inclusa con .NET 4.0

Questo renderà abbastanza difficile ottenere una traccia di pila gestita. C'è molto che puoi invertire l'ingegnere dalla traccia dello stack non gestito, purché si imposta il server di simboli in modo da ottenere nomi identificativi dai fotogrammi Stack CLR. Pubblica quella pila traccia nella tua domanda se vuoi aiuto interpretarlo. Un bug nel codice CLR non è improbabile a BTW, potresti prendere in considerazione la possibilità di chiamare il supporto Microsoft. Comunque avranno bisogno di una riprovaria. Possono averlo fatto con quella lunga traccia di pila importante se la riprova è difficile da trovare. Configura il server di simboli per ottenere una buona traccia di pila non gestita. Facile in VS2010: strumenti + opzioni, debug, simboli, spunta "Microsoft Symbol Servers".

Altri suggerimenti

si configura Procdump per ottenere una memoria a tutta la memoria se l'applicazioneha un'eccezione non gestita, che è possibile eseguire il debug in VS o Windbg

E il minidump ha informazioni di chiamata di chiamata come secchi Watson, ecco uno da CLR team e ho scritto su STESSO

Una breve spiegazione sulle informazioni di Watson Bucket che vedi nel Visualizzatore eventi per un'eccezione non gestita

    .
  1. Exeflename
  2. Versione di assemblaggio EXE
  3. Assemblaggio EXE Timestamp
  4. Nome completo
  5. Versione di assemblaggio digitale
  6. Assemblaggio di fatturazione Timestamp
  7. Metodo di assemblaggio DEF
  8. Metodo di errore Ill istruzione che ha causato l'eccezione
  9. Tipo di eccezione
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top