5

Sto sperimentando un APPCRASH dall'applicazione C#. Il runtime fornisce un messaggio di errore di "Questa applicazione ha richiesto al runtime di interromperlo in un modo insolito". Quindi, quando faccio clic su OK, ricevo un messaggio "La mia applicazione ha smesso di funzionare" con le solite opzioni "Verifica online per una soluzione", "Chiudi programma" e "Programma di debug". Quando faccio clic su "ulteriori dettagli" ottengo la firma APPCRASH, con molte informazioni aggiuntive. Alcuni di essi sono leggibili dall'uomo, alcuni sono solo numeri esadecimali. Il "Codice di eccezione" è 40000015. Esistono anche righe di "Informazioni aggiuntive". La mia domanda è: qualcuno nell'universo sa cosa significa l'informazione in un messaggio APPCRASH?Che cosa significano i dettagli di un messaggio APPCRASH?

Sembra che il messaggio fosse inteso per essere letto da qualcuno che può divinarne una causa. Durante la ricerca di risposte ho trovato un sacco di persone che pubblicano messaggi formattati esattamente allo stesso modo. Sfortunatamente, non ho trovato spiegazioni su cosa significhi questa informazione.

Inoltre, ho provato l'opzione "Programma di debug", ma non è utile. Mi mette semplicemente in DLL di sistema con nessuno del mio codice ovunque sullo stack delle chiamate. Ho studiato e l'errore non si verifica in questo codice di sistema.

Il messaggio APPCRASH ha chiamato un'altra DLL come "Modulo di errore" (questo codice utilizza molte DLL esterne) e l'errore irreversibile probabilmente si verifica lì. Ma questa informazione non è molto utile perché ho bisogno di trovare il posto nel mio codice che fa una brutta chiamata alla dll esterna (o la mette in cattivo stato). Purtroppo, quando dico "il mio codice" intendo solo il codice con cui sto lavorando. È un enorme numero di codice scritto da diverse decine di persone nell'arco di un paio d'anni, quindi non posso solo indovinare i luoghi che potrebbero rendere la chiamata fatale. Ecco perché speravo di ottenere ulteriori informazioni dal messaggio APPCRASH. Questo è anche il motivo per cui sono molto avaro di dettagli. Il tutto è molto riservato con molta burocrazia. Questo è anche il motivo per cui non ho pubblicato il contenuto del messaggio APPCRASH.

Per essere chiari, non ti sto chiedendo di eseguire il debug del mio problema per me. Non ho modo di darti un caso riproducibile dell'errore, e non sto chiedendo a nessuno di dirmi la causa dell'errore nel mio caso specifico. Voglio solo sapere come interpretare quei numeri esadecimali e non sono stato in grado di trovare alcuna documentazione.

+0

Si tratta del codice di eccezione utilizzato quando il codice C o C++ nativo chiama la funzione abort(). Non possiamo aiutarti a trovarlo, ma chiaramente si trova nelle "DLL di sistema" in cui ti sei perso. –

+0

L'eccezione non si verifica nel codice di sistema che il debugger mi ha inserito; ma è probabile che si verifichi un'eccezione in una dll esterna diversa. Se questo è da una chiamata abort(), allora sta morendo da qualche parte nella terra non gestita. – user1646801

+1

Sembra che tu abbia problemi con il codice non gestito. Per isolare il problema, proverei a cercare [DllImport] nel codice e provare a simulare, commentare questo e vedere se hai meno problemi. Un'altra idea è se si dispone di componenti di terze parti che possono avere chiamate non gestite errate. Infine, prova a WinDBG e cerca il problema. WinDBG sarà la mia ultima risorsa, dal momento che non sono uno specialista e si tratta di un vero e proprio metodo di debug. –

risposta

1

Significa che si è verificata un'eccezione non manipolata non bloccata e si sta verificando un arresto anomalo dell'applicazione.

Se funziona in modalità di debug, è necessario cercare di vedere cosa c'è di diverso nella versione di rilascio. Sono presenti tutte le librerie? Hai la configurazione di app.config?

Controllare il Visualizzatore eventi in Registri di Windows -> Applicazione per ulteriori informazioni.

Se si imposta un gestore di eccezioni, si ottengono informazioni molto migliori, ad esempio una traccia dello stack.

+0

Ciao, grazie per la risposta. Sfortunatamente, ho provato tutti i soliti trucchi e non sono arrivato molto lontano. Attualmente in esecuzione in modalità di debug e si interrompe. Ho il debugger impostato per rompere su eccezioni non gestite, e non ne cattura nessuno. Le informazioni nel visualizzatore eventi non sono più dettagliate del messaggio appcrash. – user1646801

+0

@dmck - ci sono alcune eccezioni di brutto culo (come eccezioni StackOverflowException o OutOfMemory) che corrompono lo stato di AppDomain, quelle eccezioni non possono essere registrate/memorizzate nella cache quando si verificano per reale –

0

È necessario produrre un crashdump che può essere analizzato dopo il fatto. È necessario apportare alcune modifiche al registro e quindi è possibile analizzare il file di dump utilizzando Visual Studio. Si spera che questo ti dia più indizi come una funzione specifica che sta fallendo.

Vedi questo sito per maggiori dettagli: http://blog.functionalfun.net/2013/05/how-to-debug-silent-crashes-in-net.html

Ti verrà configurando DebugDiag, uno strumento da Microsoft.

Fammi sapere come vanno le cose o se trovi degli strumenti migliori.

saluti,

Dave

8

Ecco un esempio di un messaggio di incidente app:

Problem signature: 
Problem Event Name: APPCRASH 
Application Name: WINWORD.EXE 
Application Version: 12.0.4518.1014 
Application Timestamp: 45428028 
Fault Module Name: StackHash_7ae5 
Fault Module Version: 6.0.6000.16386 
Fault Module Timestamp: 4549bdc9 
Exception Code: c0000374 
Exception Offset: 000af1c9 
OS Version: 6.0.6000.2.0.0.256.4 
Locale ID: 1033 
Additional Information 1: 7ae5 
Additional Information 2: 4cf2e59e469447e0692da79a5a9446de 
Additional Information 3: 333f 
Additional Information 4: 583336399425ab3efc33bdfbb60895ee 

nome dell'applicazione e la versione dell'applicazione sono semplici, come è il timestamp (questa è la data modificata in File Explorer, codificato come valore di timestamp Unix a 32 bit). Il modulo di errore è in genere un nome di dll e l'offset di eccezione è l'indirizzo di offset dell'istruzione hardware nella DLL che ha causato l'errore. In questo caso si trattava di un errore di runtime interno in cui non è stato possibile recuperare alcun modulo valido, quindi abbiamo ottenuto StackHash anziché un valore reale. Le versioni sono le normali stringhe di versione PE di file eseguibili in Windows. L'ID locale è la banca delle impostazioni di globalizzazione utilizzata: 1033 è en-US.

Il codice di eccezione può essere interpretato here. In questo esempio, l'errore era un STATUS_HEAP_CORRUPTION.

I campi di informazioni aggiuntive sono dati opachi e basati sul codice di eccezione. Non conosco informazioni utili su questi campi, probabilmente non ce ne sono, ed è probabile che quei campi siano volutamente non documentati in modo che Microsoft possa cambiarli secondo necessità. Questi campi sono solitamente hash MD5 di molte informazioni ... è fondamentalmente lì in modo che molte informazioni possono essere confrontate per essere uguali/diversi rapidamente tramite l'hashcode in modo da sapere se l'errore è dovuto allo stesso stato di esecuzione di un altro .

0

C'è una bella caratteristica in .net, Assistenti Debugger gestiti, per risolvere interoperations codice nativo e gestiti MSDN article about using it here

eccezioni generate dal MDA può essere configurato in studio eccezioni di Visual finestra di visualizzazione.

Problemi correlati