Non si blocca intrappolato con MS VS Debugger - come prendere?
-
01-10-2019 - |
Domanda
Sono sempre crash casuali dal mio c # app (Windows 7 / VS2008), e non mi dà un normale traccia dello stack, ma piuttosto suggerisce di chiudere / debug / trovare informazioni Windows 7 tipo di finestra di dialogo. Sono in esecuzione l'applicazione sia da sotto VS2008 o stand alone - stessa cosa. Facendo clic su "Debug" suggerisce di debug con una nuova istanza di VS, che non riesce come "un altro debugger è già collegato al app". Ma il debugger non mi dà alcuna possibilità di vedere dove non riesce, dà solo alcuni indizi nella finestra di output (qui di seguito). Come affrontare questo?
Sembra che devo abilitare (?) Prime eccezioni di possibilità nel debugger VS, ma non era chiaro come .. Apprezzo tutto l'aiuto con questo!
Addizione - Ho trovato come attivare il debug delle eccezioni in VS2008 (Debug-> eccezioni-> controllato tutte le 5 categorie di eccezioni). E ancora mi dà esattamente lo stesso risultato - incidente, senza capacità di vedere cosa sta succedendo nel debugger
.'Ps.exe' (Managed): Loaded 'C: \ Windows \ assembly \ GAC_MSIL \ System.Deployment \ 2.0.0.0__b03f5f7f11d50a3a \ System.Deployment.dll' Una prima eccezione di possibilità di tipo 'System.Deployment.Application.InvalidDeploymentException' verificato in System.Deployment.dll A prima eccezione di possibilità di tipo 'System.Threading.ThreadAbortException' verificata in mscorlib.dll Il filo 0x1964 è terminato con il codice 0 (0x0). Il filo 0x1b24 èuscito con il codice 0 (0x0). Una prima eccezione di possibilità di genere 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.Threading.ThreadAbortException' verificata in mscorlib.dll Il filo 0x19b8 ha terminato con il codice 0 (0x0). Il filo 0x18f4 èuscito con il codice 0 (0x0). Il filetto è uscito 0x420 con il codice 0 (0x0). Una prima occasione eccezione di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' verificata in mscorlib.dllUn primo eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' avvenuta in un primo mscorlib.dll eccezione di possibilità di tipo 'System.ArgumentOutOfRangeException' verificata in mscorlib.dll Il programma '[6084] Ps.exe: Gestito' è uscito con il codice di -1.073,74094 milioni (0xc0000374).
Soluzione
E 'sorta come testimonianza una di quelle enormi pile-up ad una gara di Formula 1. L'ultimo pezzo di schegge che è venuto a un periodo di riposo ha riferito:
// MessageText:
//
// A heap has been corrupted.
//
#define STATUS_HEAP_CORRUPTION ((NTSTATUS)0xC0000374L)
Sì, questo è un pneumatico molto grave blow-out. Un sacco di cose vanno male, quando un mucchio viene danneggiato. Probabilmente avete avuto qualche codice non gestito che è comportamento anomalo in un modo che è così tipico di codice non gestito, distruggendo l'integrità del cumulo con un cattivo indicatore di scrittura. Molto difficile da diagnosticare, isolare quel codice.
Altri suggerimenti
In VS, andare al debug / Eccezioni e attivare la casella di controllo sotto 'Gettato' per «eccezioni Common Language Runtime. Ciò prenderà la 'eccezione first-chance'.
Un'eccezione distribuzione sembra essere correlato a cliccare una volta. State usando il telecomando?
Crea un file di registro di output o l'uso di messaggi caselle per rintracciarlo, se lo strumento di sviluppo che si riesce.
Premere Ctrl
+ Alt
+ E
in Visual Studio o scegliere Debug> Eccezioni dal menu e quindi fare clic su Eccezioni CLR per catturare tutte le eccezioni first-chance. Questo dovrebbe poi si spera pausa al punto di contesa.
In caso contrario, provare Debug.Write
scrittura e le dichiarazioni Trace.Write
nei punti critici nel codice per vedere a che punto si raggiunge prima che si verifichi l'errore. Sia debug e scrittura possono essere trovati in System.Diagnostics
namespace.
IMO il migliore per eseguire il debug di heap corruzioni sta utilizzando Windbg. Qui è un blog posta da Tess debugging gestito il danneggiamento di heap.
HTH