Rutinas de depuración

La versión de depuración de la biblioteca en tiempo de ejecución de C ofrece muchos servicios de diagnóstico que facilitan la depuración de programas y permiten a los desarrolladores:

  • Usar directamente funciones en tiempo de ejecución durante la depuración

  • Resolver aserciones, errores y excepciones

  • Realizar el seguimiento de las asignaciones del montón y evitar pérdidas de memoria

  • Proporcionar mensajes de depuración al usuario

Versiones de depuración de las rutinas de la biblioteca en tiempo de ejecución de C

Para usar estas rutinas, se debe definir la _DEBUG marca . Todas estas rutinas no hacen nada en una compilación comercial de una aplicación. Para obtener más información sobre cómo usar las nuevas rutinas de depuración, consulte Técnicas de depuración de CRT.

Routine Usar
_ASSERT Evaluar una expresión y generar un informe de depuración cuando el resultado es FALSE
_ASSERTE Parecida a _ASSERT, pero incluye la expresión del error en el informe generado
_CrtCheckMemory Confirma la integridad de los bloques de memoria asignados en el montón de depuración
_CrtDbgBreak Establece un punto de interrupción
_CrtDbgReport, _CrtDbgReportW Genera un informe de depuración con un mensaje de usuario y envía el informe a tres destinos posibles
_CrtDoForAllClientObjects Llama a una función suministrada por la aplicación para todos los tipos de _CLIENT_BLOCK del montón
_CrtDumpMemoryLeaks Vuelca todos los bloques de memoria del montón de depuración cuando se ha producido una fuga de memoria significativa
_CrtIsMemoryBlock Comprueba que un bloque de memoria especificado está en el montón local y que tiene un identificador válido de tipo de bloque de montón de depuración
_CrtIsValidHeapPointer Comprueba que un puntero especificado está en el montón local
_CrtIsValidPointer Comprueba que un intervalo de memoria especificado es válido para lectura y escritura
_CrtMemCheckpoint Obtiene el estado actual del montón de depuración y lo almacena en una estructura de _CrtMemState proporcionada por la aplicación
_CrtMemDifference Compara si dos estados de memoria tienen diferencias significativas y devuelve los resultados
_CrtMemDumpAllObjectsSince Vuelca la información sobre objetos del montón desde que se tomó un punto de comprobación especificado o desde que se empezó a ejecutar el programa
_CrtMemDumpStatistics Vuelca la información de encabezado de depuración para un estado de memoria especificado con un formato legible para el usuario
_CrtReportBlockType Devuelve el tipo o subtipo de bloque asociado a un puntero de bloque especificado del montón de depuración.
_CrtSetAllocHook Instala una función de asignación definida por el cliente enlazándola al proceso de asignación de memoria de depuración en tiempo de ejecución de C
_CrtSetBreakAlloc Establece un punto de interrupción en un número de orden especificado de la asignación de objetos
_CrtSetDbgFlag Recupera o modifica el estado de la marca _crtDbgFlag para controlar el comportamiento de asignación del administrador del montón de depuración
_CrtSetDumpClient Instala una función definida por la aplicación a la que se llama cada vez que se llama a una función de volcado de depuración para volcar los bloques de memoria de tipo _CLIENT_BLOCK
_CrtSetReportFile Identifica el archivo o flujo que se va a usar como destino de un tipo de informe concreto _CrtDbgReport
_CrtSetReportHook Instala una función de creación de informes definida por el cliente enlazándola al proceso de creación de informes de depuración en tiempo de ejecución de C
_CrtSetReportHook2, _CrtSetReportHookW2 Instala o desinstala una función de generación de informes definida por el cliente enlazándola al proceso de creación de informes de depuración en tiempo de ejecución de C
_CrtSetReportMode Especifica los destinos generales de un tipo específico de informe generado por _CrtDbgReport
_RPT[0,1,2,3,4] Realiza el seguimiento del progreso de la aplicación generando un informe de depuración mediante una llamada a _CrtDbgReport con una cadena de formato y un número variable de argumentos. No proporciona información sobre el archivo de código fuente y el número de línea.
_RPTF[0,1,2,3,4] Es parecida a las macros de _RPTn, pero proporciona el nombre del archivo de código fuente y el número de línea donde se originó la solicitud de informe
_calloc_dbg Asignar un número especificado de bloques de memoria en el montón con espacio adicional para un encabezado de depuración y sobrescribir búferes
_expand_dbg Cambia el tamaño de un bloque de memoria especificado del montón, expandiendo o contrayendo el bloque
_free_dbg Libera un bloque de memoria del montón
_fullpath_dbg, _wfullpath_dbg Crea un nombre de ruta de acceso absoluta o completa para el nombre de ruta de acceso relativa especificado, mediante _malloc_dbg para asignar memoria.
_getcwd_dbg, _wgetcwd_dbg Obtiene el directorio de trabajo actual, mediante _malloc_dbg para asignar memoria.
_malloc_dbg Asignar un bloque de memoria en el montón con espacio adicional para un encabezado de depuración y sobrescribir búferes
_msize_dbg Calcula el tamaño de un bloque de memoria del montón
_realloc_dbg Reasigna un bloque de memoria especificado en el montón, para lo que lo mueve o lo cambia de tamaño
_strdup_dbg, _wcsdup_dbg Duplica una cadena, mediante _malloc_dbg para asignar memoria.
_tempnam_dbg, _wtempnam_dbg Genera nombres que se pueden usar para crear archivos temporales, mediante _malloc_dbg para asignar memoria.

Rutinas en tiempo de ejecución de C que no están disponibles en el formulario de código fuente

El depurador se puede usar para recorrer el código fuente de la mayoría de rutinas en tiempo de ejecución de C durante el proceso de depuración. Sin embargo, Microsoft considera que alguna tecnología es propietaria y, por lo tanto, no proporciona el código fuente para un subconjunto de estas rutinas. La mayoría de estas rutinas pertenecen a los grupos de control de excepciones o de procesamiento de punto flotante, pero también se incluyen algunas otras. En la siguiente tabla se enumeran estas rutinas.

Aunque el código fuente está disponible para la mayoría de las printf rutinas y scanf , realizan una llamada interna a otra rutina para la que no se proporciona código fuente.

Rutinas que se comportan de manera diferente en una compilación de depuración de una aplicación

Ciertas funciones en tiempo de ejecución de C y algunos operadores de C++ se comportan de manera diferente cuando se les llama desde una versión de depuración de una aplicación. (Puede crear una compilación de depuración de una aplicación definiendo la _DEBUG marca o vinculando con una versión de depuración de la biblioteca en tiempo de ejecución de C). Las diferencias de comportamiento suelen constar de características o información adicionales proporcionadas por la rutina para admitir el proceso de depuración. En la siguiente tabla se enumeran estas rutinas.

Rutina C abort

Rutina C assert

Operador C++ delete

Operador C++ new

Consulte también

Rutinas en tiempo de ejecución Universal C por categoría
Comprobación de errores en tiempo de ejecución