Aserciones

Actualización: noviembre 2007

Este tema es aplicable a:

Edición

Visual Basic

C#

C++

Web Developer

Express

Sólo para código nativo

Standard

Sólo para código nativo

Pro y Team

Sólo para código nativo

Leyenda de la tabla:

Se aplica

No procede

Comando o comandos ocultos de manera predeterminada.

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:

Se pueden usar aserciones para:

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 Resultados, así como en el cuadro de diálogo Error de aserción. El mensaje de aserción se puede copiar desde la ventana Resultados en una ventana de texto si se desea guardarlo para consultas posteriores. La ventana Resultados 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

Conceptos

Seguridad del depurador

Referencia

Aserciones en el código administrado

Otros recursos

Depuración de código nativo