La finestra di dialogo “Errore applicazione” può essere disabilitata?

Sto usando Hudson come server di integrazione continua per testare il codice C / C ++. Sfortunatamente, ho un bug da qualche parte che causa il danneggiamento della memoria, quindi su alcune macchine Windows a volte avrò una finestra di dialogo “Errore dell’applicazione” che spiega che un’istruzione ha fatto riferimento a una memoria che non può essere letta. Questa finestra di dialogo si apre e in pratica si blocca l’esecuzione del test, poiché richiede l’intervento manuale.

C’è un modo per impedire che questa finestra di dialogo venga visualizzata, in modo che l’esecuzione del test fallisca semplicemente e sia riportata come tale in Hudson?

È ansible generare automaticamente un minidump invece di mostrare la finestra di dialogo?

  1. Usa “Disabilita segnalazione errori”, come suggerisce Mr. Gently. Vedi anche questo articolo su PC World .
  2. Se ti capita di avere MS Visual Studio sul tuo computer di costruzione, cattura gli errori dell’applicazione e fa apparire una finestra di dialogo. Per disabilitare queste windows di dialogo (e anche la funzionalità di debug Just-In-Time di Visual Studio), eseguire il comando drwtsn32.exe -i per impostare Dr. Watson come debugger di sistema predefinito. Dr. Watson genererà un core dump e uscirà silenziosamente. (Consultare questo articolo della Microsoft Knowledge Base: http://support.microsoft.com/kb/q121434/ .)

Puoi anche fare qualcosa di simile a questo programma usando SetErrorMode . Vedi questo articolo per maggiori dettagli.

Un semplice esempio di come usarlo è quello di fare quanto segue:

 SetErrorMode(GetErrorMode () | SEM_NOGPFAULTERRORBOX); 

Gli ‘OR’ sopra ‘la modalità corrente con la nostra aggiunta desiderata.

Oltre a ciò che ha detto rkb, se stai usando Windows XP a 64 bit, ci sono due serie di valori. Quelli nella solita posizione del registro e quelli sotto la chiave Wow6432Node in HKLM . Per aggiornare entrambi, eseguire drwtsn32.exe -i da %SYSTEMROOT%\system32 e %SYSTEMROOT%\SysWOW64 .

Disabilita segnalazione degli errori tramite:

  • Modifica del Registro di sistema – aggiungi la tua applicazione a HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PCHealth \ ErrorReporting \ ExclusionList, OPPURE
  • Fare clic con il tasto destro del mouse su Risorse del computer, andare alla scheda Avanzate e selezionare l’opzione “Disabilita segnalazione errori”, OPPURE
  • È ansible accedere alla console dei servizi negli strumenti di amministrazione, trovare il servizio di segnalazione degli errori, accedere alle proprietà e disabilitarlo

È ansible utilizzare le varie funzioni _CrtSetReport per controllare il modo in cui il runtime C / C ++ risponde a vari errori (_CrtSetReportHook, _CrtSetReportMode, _CrtSetReportFile, _CrtSetReportHook2)

Utilizza un’istruzione try / catch per rilevare l’eccezione e gestirla nel modo desiderato.