Pregunta

Estoy tratando de usar la detección de fugas de memoria CRT pero recibo el siguiente mensaje en Microsoft Visual Studio: "Fugas de memoria detectadas: omitiendo el volcado de objetos". Nunca puedo conseguir que lo haga y el volcado de objetos.

Seguí las instrucciones del artículo de Microsoft sobre Detección de fugas de memoria ( http://msdn.microsoft.com/en-us/library/e5ewb1h3 (VS.80) .aspx ) sin suerte.

En mi stdafx.h tengo (reconstruí todo el proyecto):

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

En el punto de entrada de mi solicitud tengo:

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

También espero que muestre el nombre del archivo y el número de línea en el formato anunciado por Microsoft:

Detected memory leaks!
Dumping objects ->
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} 
normal block at 0x00780E80, 64 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

Aunque NUNCA he podido obtener un volcado de objetos, pero he notado que otras personas dicen que ven algo así (incluso con _CRTDBG_MAP_ALLOC definido):

Detected memory leaks!
Dumping objects ->
{18} normal block at 0x00780E80, 64 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

Realmente no quiero perder tiempo reemplazando a los operadores nuevos y eliminados, así que esperaba que la depuración de CRT me ayudara. Si esto no funciona, es posible que termine anulando los operadores nuevos y eliminados, pero realmente quiero obtener la información de asignación con un nombre de archivo y un número de línea (cruces de dedos).

Gracias Kiril

¿Fue útil?

Solución

No lo tengo aquí en mi máquina, pero cuando instala MSVC tiene la opción de instalar (la mayoría de) el código fuente para la biblioteca en tiempo de ejecución de C (es decir, para MSVCRTxx.xxx). Si busca en ese código fuente para " saltar el volcado de objeto " entonces es posible que pueda averiguar por qué se omite el volcado de objetos.

Otros consejos

Acabo de usar Detector visual de fugas después de obtener un gran volcado de objetos filtrados sin nombres de archivo / números de línea usando El enfoque _CrtDumpMemoryLeaks. VLD funcionó como se anuncia (es gratis) y estoy bastante contento con eso.

El motivo y el nombre del archivo se imprimen es porque la asignación se realizó con una macro new que pasa __FILE__ y __LINE__. Si no quiere tocar nuevo , no pasará __FILE__ y __LINE__ al CRT y no podrá imprimir ese. No hay una gran magia involucrada aquí, realmente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top