Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una aserción, o instrucción Assert
, prueba una condición especificada como un argumento de dicha instrucción Assert
. Si la condición se evalúa como true, no se produce ninguna acción. Si la condición se evalúa como false, se produce un error en la aserción. Si está ejecutando una compilación de depuración, el programa entra en modo de interrupción.
En este tema
Aserciones en el espacio de nombres System.Diagnostics
Método Debug.Assert
Efectos secundarios de Debug.Assert
Requisitos de seguimiento y depuración
Personalización del comportamiento de aseveración
Establecimiento de aserciones en archivos de configuración
Aserciones en el namespace System.Diagnostics
En Visual Basic y Visual C#, se puede usar el método Assert
desde Debug o Trace, que están en el namespace System.Diagnostics.
Debug Los métodos de clase no se incluyen en una versión de lanzamiento del programa, por lo que no aumentan el tamaño ni reducen la velocidad del código de versión.
C++ no admite los métodos de Debug clase. Puede lograr el mismo efecto mediante la Trace clase con compilación condicional, como #ifdef DEBUG
... #endif
.
Método Debug.Assert
Utilice el método System.Diagnostics.Debug.Assert libremente para probar condiciones que deberían ser true si el código es correcto. Por ejemplo, supongamos que ha escrito una función de división de enteros. Según las reglas matemáticas, el divisor nunca puede ser cero. Puede probar esto mediante una aserción:
int IntegerDivide ( int dividend , int divisor )
{
Debug.Assert ( divisor != 0 );
return ( dividend / divisor );
}
Al ejecutar este código en el depurador, se evalúa la instrucción de aserción, pero en la versión de lanzamiento, no se realiza la comparación, por lo que no hay ninguna sobrecarga adicional.
Este es otro ejemplo. Tiene una clase que implementa una cuenta de comprobación, como se indica a continuación:
float balance = savingsAccount.Balance;
Debug.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );
Antes de retirar dinero de la cuenta, quieres asegurarte de que el saldo de la cuenta sea suficiente para cubrir la cantidad que planeas retirar. Puede escribir una aserción para comprobar el saldo:
float balance = savingsAccount.Balance;
Trace.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );
Tenga en cuenta que las llamadas al System.Diagnostics.Debug.Assert método desaparecen al crear una versión de lanzamiento del código. Esto significa que la llamada que comprueba el saldo desaparece en la versión de lanzamiento. Para solucionar este problema, debe reemplazar System.Diagnostics.Debug.Assert por System.Diagnostics.Trace.Assert, que no desaparece en la versión de lanzamiento.
Las llamadas a System.Diagnostics.Trace.Assert añaden sobrecarga a tu versión de Release, a diferencia de las llamadas a System.Diagnostics.Debug.Assert.
Efectos secundarios de Debug.Assert
Cuando use System.Diagnostics.Debug.Assert, asegúrese de que cualquier código dentro Assert
no cambie los resultados del programa si Assert
se quita. De lo contrario, es posible que introduzca accidentalmente un error que solo aparezca en la versión de lanzamiento del programa. Tenga especial cuidado con las aserciones que contienen llamadas a funciones o procedimientos, como el ejemplo siguiente:
Este uso de System.Diagnostics.Debug.Assert podría parecer seguro a primera vista, pero supongamos que la función meas actualiza un contador cada vez que se llama. Al compilar la versión de lanzamiento, se elimina esta llamada a meas, por lo que el contador no se actualiza. Este es un ejemplo de una función con un efecto secundario. Eliminar una llamada a una función que tiene efectos secundarios podría dar lugar a un error que solo aparece en la versión de lanzamiento. Para evitar estos problemas, no utilice llamadas de función en una System.Diagnostics.Debug.Assert instrucción. Use una variable temporal en su lugar:
Incluso cuando uses System.Diagnostics.Trace.Assert, puede que todavía quieras evitar colocar llamadas de función dentro de una instrucción Assert
. Estas llamadas deben ser seguras, ya que System.Diagnostics.Trace.Assert las declaraciones no se eliminan en una compilación de lanzamiento. Sin embargo, si evita estas construcciones como cuestión de hábito, es menos probable que se produzca un error al usar System.Diagnostics.Debug.Assert.
Requisitos de seguimiento y depuración
Si crea el proyecto mediante los asistentes de Visual Studio, el símbolo TRACE se define de forma predeterminada en configuraciones de versión y depuración. El símbolo DEBUG se define de forma predeterminada solo en la compilación Debug.
De lo contrario, para que los métodos funcionen con Trace, el programa debe tener uno de los siguientes elementos en la parte superior del archivo de origen.
#Const TRACE = True
en Visual Basic#define TRACE
en Visual C# y C++O bien, el programa debe compilarse con la opción TRACE:
/d:TRACE=True
en Visual Basic/d:TRACE
en Visual C# y C++Si necesita usar los métodos de depuración en una compilación de Release de C# o Visual Basic, debe definir el símbolo DEBUG en la configuración de Release.
C++ no admite los métodos de Debug clase. Puede lograr el mismo efecto mediante la Trace clase con compilación condicional, como
#ifdef DEBUG
...#endif
. Puede definir estos símbolos en el cuadro de diálogo Páginas de propiedades del< proyecto>. Para obtener más información, vea Cambiar la configuración del proyecto para una configuración de depuración de Visual Basic o cambiar la configuración del proyecto para una configuración de depuración de C o C++.
Aserción de argumentos
System.Diagnostics.Trace.Assert y System.Diagnostics.Debug.Assert pueden aceptar hasta tres argumentos. El primer argumento, que es obligatorio, es la condición que desea comprobar. Si llama a System.Diagnostics.Trace.Assert(Boolean) o System.Diagnostics.Debug.Assert(Boolean) con un solo argumento, el método Assert
comprueba la condición y, si el resultado es falso, genera el contenido de la traza de llamadas en la ventana Salida. En el ejemplo siguiente se muestra System.Diagnostics.Trace.Assert(Boolean) y System.Diagnostics.Debug.Assert(Boolean):
Los argumentos segundo y tercero, si están presentes, deben ser cadenas. Si llama a System.Diagnostics.Trace.Assert o System.Diagnostics.Debug.Assert con dos o tres argumentos, el primer argumento es una condición. El método comprueba la condición y, si el resultado es false, genera la segunda cadena y la tercera cadena. En el ejemplo siguiente se muestra System.Diagnostics.Debug.Assert(Boolean, String) y System.Diagnostics.Trace.Assert(Boolean, String) se usa con dos argumentos:
Debug.Assert ( stacksize > 0, "Out of stack space" );
Trace.Assert ( stacksize > 0, "Out of stack space" );
En el ejemplo siguiente se muestra System.Diagnostics.Debug.Assert(Boolean, String, String) y System.Diagnostics.Trace.Assert(Boolean, String, String) se usa con tres argumentos:
Debug.Assert ( stacksize > 100, "Out of stack space" , "Failed in inctemp" );
Trace.Assert ( stacksize > 0, "Out of stack space", "Failed in inctemp" );
Personalización del comportamiento de assert
Si ejecuta la aplicación en modo de interfaz de usuario, el Assert
método muestra el cuadro de diálogo Error de aserción cuando se produce un error en la condición. Las acciones que se producen cuando se produce un error en una aserción se controlan mediante la Listeners propiedad o Listeners .
Puede personalizar el comportamiento de salida agregando un TraceListener objeto a la Listeners
colección, quitando un TraceListener elemento de la Listeners
colección o reemplazando el System.Diagnostics.TraceListener.Fail método de un existente TraceListener
para que se comporte de forma diferente.
Por ejemplo, podría sobrescribir el método System.Diagnostics.TraceListener.Fail para escribir en un registro de eventos en lugar de mostrar el cuadro de diálogo Error de aserción.
Para personalizar la salida de esta manera, el programa debe contener un agente de escucha, y debe heredar de TraceListener y sobrescribir su método System.Diagnostics.TraceListener.Fail.
Para obtener más información, consulte Escuchas de seguimiento.
Establecimiento de aserciones en archivos de configuración
Puede establecer aserciones en el archivo de configuración del programa, así como en el código. Para obtener más información, vea System.Diagnostics.Trace.Assert o System.Diagnostics.Debug.Assert.