Stiamo riscontrando problemi con Windows che ignorano le eccezioni e consentono all'applicazione di continuare a funzionare, quando l'eccezione viene generata all'interno del message pump. Per esempio, abbiamo creato un test di applicazione MDI MFC, e sovrascritto OnDraw:Eccezioni catturate silenziosamente da Windows, come gestirle manualmente?
void CTestView::OnDraw(CDC* /*pDC*/)
{
*(int*)0 = 0; // Crash
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
Ci si aspetterebbe un messaggio di errore brutto quando si esegue l'applicazione, ma in realtà ottenere nulla. Il programma sembra essere in esecuzione perfettamente bene, ma se si controlla la finestra di uscita si vedrà:
eccezione first-chance a 0x13929384 in Test.exe: 0xC0000005: Violazione di accesso scrittura posizione 0x00000000.
eccezione prima possibilità di 0x77c6ee42 in Test.exe: 0xC0150010: Il contesto attivazione in fase di disattivazione non è attivo per il thread corrente di esecuzione.
So perché sto ricevendo l'eccezione del contesto dell'applicazione, ma perché viene gestito in silenzio? Significa che le nostre applicazioni potrebbero riscontrare seri problemi quando sono in uso, ma non lo sapremo mai, perché i nostri utenti non segnaleranno mai alcun problema.
Si sta utilizzando Visual Studio? –
Sì, Visual Studio 2008. –
Ok, quindi guarda e prova la mia risposta di seguito ... –