Aserciones
Este tema se aplica a:
Edición |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
Sólo para código nativo |
||||
Pro, Premium y Ultimate |
Sólo para código nativo |
Una instrucción de aserción especifica una condición que se espera que sea cierta (valor true) en un determinado punto del programa. Si la condición no es cierta, la aserción produce un error, la ejecución del programa se interrumpe y aparece el cuadro de diálogo Error de aserción.
Visual C++ admite instrucciones de aserción mediante los siguientes constructores:
Aserciones de MFC para programas MFC.
ATLASSERT para programas que utilizan ATL.
Aserciones de CRT para programas que utilizan la biblioteca en tiempo de ejecución de C.
La función assert de ANSI para otros programas en C o C++.
Se pueden usar aserciones para:
Capturar errores lógicos. Para obtener más información, vea Realizar capturas de errores de lógica.
Comprobar resultados de una operación. Para obtener más información, vea Comprobación de resultados.
Probar condiciones de error que deberían haberse controlado. Para obtener más información, vea Realizar pruebas de las condiciones de error.
Aserciones de MFC y de la biblioteca en tiempo de ejecución de C
Cuando el depurador se detiene debido a una aserción de MFC o de la biblioteca en tiempo de ejecución de C, navega hasta el punto del archivo de código fuente donde ocurrió el error de aserción (si el archivo está disponible). El mensaje de aserción aparece en la Ventana de salida, así como en el cuadro de diálogo Error de aserción. El mensaje de aserción se puede copiar desde la Ventana de salida en una ventana de texto si se desea guardarlo para consultas posteriores. La Ventana de salida puede contener también otros mensajes de error. Examine estos mensajes con cuidado, ya que pueden proporcionar pistas para encontrar la causa del error de aserción.
Mediante el uso racional de aserciones en el código, se pueden capturar muchos errores durante la fase de desarrollo. Una buena regla consiste en escribir una aserción para cada suposición que se realice. Si supone, por ejemplo, que un argumento no es NULL, utilice una instrucción de aserción para verificar esa suposición.
_DEBUG
Las instrucciones de aserción sólo se compilan cuando _DEBUG está definido. Cuando _DEBUG no está definido, el compilador trata las aserciones como instrucciones null. Por lo tanto, las instrucciones de aserción no producen sobrecarga en la versión final del programa; pueden utilizarse libremente en el código sin afectar al rendimiento de la versión de lanzamiento y sin tener que utilizar directivas #ifdef.
Efectos secundarios del uso de aserciones
Cuando agregue aserciones al código, asegúrese de que no producen efectos secundarios. Por ejemplo, considere la siguiente aserción:
ASSERT(nM++ > 0); // Don't do this!
Como la expresión ASSERT no se evalúa en la versión de lanzamiento del programa, nM tendrá diferente valor que en la versión de depuración. En MFC, se puede utilizar la macro VERIFY en lugar de ASSERT. VERIFY evalúa la expresión pero no comprueba el resultado en la versión de lanzamiento.
Tenga especial cuidado al utilizar llamadas a funciones en las instrucciones de aserción, ya que la evaluación de una función puede producir efectos laterales inesperados.
ASSERT ( myFnctn(0)==1 ) // unsafe if myFnctn has side effects
VERIFY ( myFnctn(0)==1 ) // safe
VERIFY llama a myFnctn en ambas versiones, de depuración y lanzamiento, de modo que su uso es aceptable. No obstante, tendrá la sobrecarga de una llamada a función innecesaria en la versión de lanzamiento.
Vea también
Referencia
Aserciones en el código administrado