2011-08-31 14 views
5

In un programma ho chiamato per errore closeHandle() due volte su un handle mutex (chiudendo l'handle che era già chiuso).Alcuni errori di eccezione si verificano solo nel debugger?

Durante l'esecuzione del codice nel debugger, ho ricevuto l'errore di eccezione An invalid HANDLE was specified. come previsto.

Tuttavia, eseguendo il programma "normalmente" come indipendente (all'esterno del debugger), l'eccezione non viene visualizzata o qualsiasi altro errore. Il programma sembra funzionare normalmente.

Si tratta solo di un'impostazione in Visual Studio .NET 2003 o ce ne sono altri ancora?

+6

Questo è il comportamento documentato di closeHandle(). Vedere http://msdn.microsoft.com/en-us/library/ms724211%28v=vs.85%29.aspx: "Se l'applicazione è in esecuzione in un debugger, la funzione genererà un'eccezione se riceve o un gestire il valore che non è valido o un valore pseudo-handle. " – user168715

+0

Probabilmente si sta eseguendo la build di debug in VS .NET, ma quando si fa doppio clic su si esegue la build di rilascio? –

+0

Ho visto un comportamento simile con le affermazioni. La compilazione condizionale potrebbe farlo. –

risposta

5

I documentation stati:

Se l'applicazione è in esecuzione in un debugger, la funzione genera un'eccezione se riceve un valore maniglia che non è valido o un valore pseudo-handle. Ciò può succedere se si chiude un handle due volte o se si chiama CloseHandle su un handle restituito dalla funzione FindFirstFile anziché chiamare la funzione FindClose.

+0

"Lancia un'eccezione" ?! Mi aspetterei che gli autori di documentazione MSDN conoscano meglio. Le funzioni C non generano eccezioni. Nel contesto delle eccezioni Win32 (ovvero gestione delle eccezioni strutturate), le eccezioni vengono * sollevate *, non generate. –

Problemi correlati