2011-08-31 14 views
5

En un programa accidentalmente llamé closeHandle() dos veces en un controlador mutex (cerrando el mango que ya estaba cerrado).¿Se producen ciertos errores de excepción solo en el depurador?

Al ejecutar el código en el depurador, recibí el error de excepción An invalid HANDLE was specified. como se esperaba.

Sin embargo, al ejecutar el programa "normalmente" como independiente (fuera del depurador) la excepción no aparece o cualquier otro error. El programa parece ejecutarse normalmente.

¿Es esto solo una configuración en Visual Studio .NET 2003 o hay más detrás de esto?

+6

Ese comportamiento documentado de closeHandle(). Consulte http://msdn.microsoft.com/en-us/library/ms724211%28v=vs.85%29.aspx: "Si la aplicación se ejecuta con un depurador, la función generará una excepción si recibe una manejar el valor que no es válido o un valor de pseudo-handle ". – user168715

+0

Quizás esté ejecutando la compilación de depuración en VS .NET, pero cuando hace doble clic está ejecutando la compilación de lanzamiento. –

+0

He visto un comportamiento similar con los asertos. La compilación condicional podría hacerlo. –

Respuesta

5

Los documentation estados:

Si la aplicación se ejecuta bajo un depurador, la función producirá una excepción si recibe o bien un valor de identificador que no es válido o un valor pseudo-mango. Esto puede suceder si cierra un identificador dos veces o si llama a CloseHandle en un identificador devuelto por la función FindFirstFile en lugar de llamar a la función FindClose.

+0

"Lanza una excepción"? Esperaría que los escritores de documentación de MSDN lo supieran mejor. Las funciones C no arrojan excepciones. En el contexto de las excepciones de Win32 (también conocido como Manejo estructurado de excepciones), las excepciones se * levantan *, no se lanzan. –

Cuestiones relacionadas