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