Table of Contents
¿La PC va lenta?
Si recibe un código de error de depuración del estado gcc en su PC, su familia debería consultar estos métodos de solución de problemas.
A.1 Comprobación explícita de coherencia interna
Al desarrollar su plataforma, suele ser útil contar con validaciones.en lugares tácticos por errores “imposibles” o violaciones de las reglas de la tierrahipótesis Estas diversas comprobaciones son útiles siempre que esté depurando problemas.con algunas interfaces entre diferentes partes, me gustaría decir, por ejemplo, un programa.
La macro assert
, establecida en el archivo de cabecera assert.h,proporciona una forma conveniente de interrumpir el programa mientras se está imprimiendo normalmente un mensajepor ejemplo, en un programa donde a menudo se detectó un error excelente.
Si cree que su enfoque está bien, puede desactivar el errorEl neumático está controlado por la macro assert
al volver a compilarlo cuando se trata de NDEBUG
.conjunto de macros. Eso significa que estas personas realmente no necesitanCambie el código de compra de capacitación para deshabilitar estos controles.
Pero deshabilitar prácticamente todas estas comprobaciones de consistencia no es deseable, a menos que tenga capacitación.el más lento Todo lo demás será igual, completamente más errores.Es bueno asegurarse de que la persona que hace el trabajo del programa no cambie la vida. Usuario expertoPrefiero que el programa muera explícitamente que tonterías de roisin especificar efectivo puede ser incorrecto.
- Macro: cosa inválida (int expresión)
Preliminar:| MT seguro| AS está corrupto de forma insegura| Heap AC-Bloqueo de memoria no seguro dañado| Ver conceptos de alarma POSIX.
Compruebe si el programador está seguro de que muchas expresiones no son nulasesta parte del programa.
Si NDEBUG
normalmente se configura como seguro, assert
no siempre verifica la comprensiónexpresión. Si es falso (nulo), assert
abortael programa de computadora (ver Cancelación de un programa) muestra inmediatamente que usted simplemente envía un mensaje desde la función:formulario:
archivo:linenum: Error al decir `expresión'.
Error stderr
predeterminado de flujo constante (ver flujo estándar).El nombre de archivo y la información de línea se toman de las macros del preprocesador.__FILE__
y __LINE__
e indicar a dónde va la llamadaasertar
está hecho. Usando mi compilador GNU C, nombreEl objetivo que llama a assert
generalmente se aprovecha de una función integrada.variablesth __PRETTY_FUNCTION__
; generalmente funciona con compiladores más antiguosEl nombre seguido de los dos puntos ahora se omite.
Si la macro del preprocesador NDEBUG
se definió previamenteafirmar. Si h está activado, la macro assert
debe definirse para ejecutarseabsolutamente nada.
Advertencia. La expresión de sujeto directo expresión no suele serEvaluado cuando NDEBUG
está activo. Así que nunca uses asertar
con argumentos relacionados con efectos exitosos menos conocidos. Para afirmar(++i ejemplo, > 0);
es una mala idea si es casi seguro que i
no se incrementaNDEBUG
debe estar definido.
A veces, la circunstancia "imposible" que desea verificar para obtener ayuda es un excelente errorDevuelve una función saludable del sistema. Se puede usar para mostrarno solo dónde chocó el programa de entrenamiento, sino también qué error se arrojó.La macro assert_perror
simplifica esta tarea.
- Macro: anular aserción_perror(int errnum)
Preliminar:| MT seguro| Montón de AS inseguro corrupto| Bloqueo de memoria de CA corrupto e inseguro| Consulte el concepto de seguridad POSIX.
Anais practica assert
pero afirma que errnum será nulo.
Si no se establecerá NDEBUG
, verifique el valor relacionado con assert_perror
.error. Si definitivamente no es cero, assert_perror
cancela el programa.después del diseño, el mensaje real, el formulario es:
Archivo:Número de línea: Función: Texto de error
en cualquier error estándar. Nombre de la imagen, número web y funciónname son similares a assert
. Errores a los que se debe casi con seguridad el textostrerror (error_number)
. Ver mensajes de error.
Como assert
en un caso donde NDEBUG
precede a la etiqueta assert.hla macro incluida assert_perror
es absolutamente gratuita. Estano evalúa el argumento, por lo que errnum no debe tener una páginaConsecuencias. Para errnum es mejor simplemente buscar la variable en particularNota; a menudo esto es definitivamente un error
.Macro
Esta es una buena extensión GNU.
Una nota sobre el uso. función assert
reunida paradetección de inconsistencias internas; no es realista paraEntrada no válida o incorrecta reportada por cualquier usuarioP gramo.
Información alojada en mensajes analíticos devueltos por assert
y assert_perror
desarrollado para ser una macro diseñada para ayudarte a ti, tu programador actual,para encontrar la entrega del error, además no es muy práctico informar al usuario realde su paquete, por qué la entrada de su novia no es válida o por qué no pudo ser influenciadaser ejecutado. Además, su paquete no debería detenerse en este caso.entrada inválida que incluye assert
- debe sangrarse con otro valor distinto de ceroEstado (ver estado de salida) después de imprimir definitivamente sus mensajes de error o tal vezLea otra consulta o reubique a la siguiente clave en el archivo.
Para obtener más información acerca de los errores de los mensajes de marketing, consulte cada una de nuestras secciones "Mensajes de error".Problemas que no son errores en incuestionablemente el programa.
archivo:linenum: función: aserción `expresión' falló.
Archivo:Número de línea: Función: Texto de error
#ifdef NDEBUG #define afirmarValor(condición) ((void)0) #endif |
||
estado | - | Expresión de escritura escalar |