2012-04-05 24 views
8

Se un'app VB6 sta causando la comparsa di un evento Application Hang nel Visualizzatore eventi, come posso scoprire di più sul motivo per cui l'applicazione è bloccata?Come trovare ulteriori informazioni sull'evento Hang di applicazione?

Un evento Application Hang significa che l'app si è bloccata e si è bloccata o semplicemente si blocca temporaneamente?

Tutto che ottenga nel registro eventi per questo evento è:

Hanging application [MyAppName].exe, version [MyAppVersionNo], hang module hungapp, version 0.0.0.0, hang address 0x00000000. 

Questo non è abbastanza e voglio essere in grado di saperne di più sul perché è appeso. Quali modifiche al codice o altri passaggi devono essere eseguiti per far sì che l'app fornisca maggiori dettagli nel registro eventi?

+0

L'applicazione dispone di routine a esecuzione prolungata quando è occupato e non è in grado di rispondere ai messaggi di Windows? – jac

+0

Non che io sappia. Questo registro eventi proviene da un sito client. Vorrei che l'evento mostrasse più informazioni su ciò che stava accadendo in quel momento. – CJ7

+0

È possibile eseguire un dump della memoria di processo (o consentire all'utente di farlo) quando l'applicazione si blocca e quindi analizzarla e osservare lo stack di chiamate. – MicSim

risposta

5

Si consiglia di utilizzare Windows Performance Toolkit.La versione migliore da utilizzare è nel kit di valutazione di Windows & http://www.microsoft.com/download/en/details.aspx?id=28997

Una volta installato, è necessario avviare Windows Performance Recorder (WPR) e fare clic sul pulsante Avvia per iniziare la registrazione. Quindi, riproduci il problema con la tua app. Quindi tornare a WPR e premere il pulsante Salva. Quindi, caricare Windows Performance Analyzer e aprire il file * .ETL che è stato generato. Quindi si desidera andare alla sezione Attività del sistema in Graph Explorer, espanderla e trovare il grafico Ritardi UI (o potrebbe essere il primo grafico parcheggiato su Attività di sistema). Fare doppio clic su di esso per ottenere la versione dettagliata in una scheda Analisi.

Una volta individuato il ritardo dell'interfaccia utente a cui sei interessato, puoi aggiungere un altro grafico come Utilizzo CPU (Campionata) dal nodo Elaborazione in Graph Explorer. Quando i due grafici si trovano nella stessa scheda Analisi, il loro scorrimento e selezione saranno sincronizzati. Quindi puoi fare clic sull'evento di ritardo dell'interfaccia utente e anche evidenziare l'intervallo corrispondente in Utilizzo CPU.

+0

Il link sopra è morto, prova questo https://www.microsoft.com/en-US/download/details.aspx?id=39982 mi mostra solo ADK per Win 8.1 ... – Jakob

+0

Penso che sia parte di l'SDK ora, a partire da Windows 10. https://dev.windows.com/en-us/downloads/windows-10-sdk –

2

L'evento Hang dell'applicazione indica che Windows ha deciso che l'applicazione non risponde. Poiché l'evento è generato dal sistema operativo e non dall'applicazione, le opzioni per ottenere ulteriori informazioni nell'evento sono estremamente limitate.

Questo è ciò che sembra essere disponibile su un evento di applicazione Hang:

Messaggio: Hanging applicazione% 1, versione% 2, appendere modulo% 3, versione% 4, appendere indirizzo 0x% 5.

Da:

http://www.microsoft.com/technet/support/ee/transform.aspx?ProdName=Windows+Operating+System&ProdVer=5.2&EvtID=1002&EvtSrc=Application+Hang&LCID=1033

Se si ritiene che la causa dell'evento è qualcosa che l'applicazione fa (in contrapposizione a qualcosa nell'ambiente in cui l'applicazione è in esecuzione), allora invece di cercare di passare informazioni sull'evento di hang, è necessario aumentare il livello delle informazioni di registro in modalità di debug e cercare nel file di registro dell'applicazione per vedere cosa sta facendo prima di smettere di rispondere.

Se mancano le informazioni di registrazione o una struttura di registrazione nell'applicazione, quindi è in cui si dovrebbe concentrare i propri sforzi. Il vantaggio è che trarrai vantaggio da una registrazione migliore anche in futuro. Utilizzare comunque un framework di registrazione, in modo da poter disabilitare la registrazione del livello di debug in un ambiente di produzione, quando tutto procede senza intoppi.

2

Mi avvicinerei a questo esaminando il codice nel modulo che Windows ha determinato si è bloccato, il cui nome è stato scritto nel registro eventi. Il tentativo di ottenere maggiori dettagli nell'evento di hang non sarà possibile perché quando Windows ha determinato che l'app non risponde, è troppo tardi.

Nel modulo sospeso si aggiungono più chiamate a DoEvents e si registrano i messaggi di stato direttamente in EventLog. L'aggiunta di un framework di registrazione a questo punto introdurrebbe la complessità e comporterebbe un accesso al database o al file in cui archiviare i registri.

Windows pensa che l'app sia bloccata perché ha smesso di rispondere ai messaggi. Sfortunatamente, l'implementazione di un secondo thread nell'app VB6 non è banale, diversamente da .NET. In ogni caso, l'aggiunta di un altro thread manterrebbe l'app reattiva, ma probabilmente rimarrebbe comunque rispondere alla domanda, "perché il codice impiega così tanto tempo per essere eseguito?"

0

Ottenere informazioni dalla prospettiva di eventi di Windows non sarà di aiuto. Prova ad avere traccia nella tua applicazione che ti aiuta a ottenere la causa esatta.

Problemi correlati