2011-09-23 8 views
6

trato de permitir la detección de fugas de memoria msvc con el número de línea como este fragmento encontré here:impulso :: prueba

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. 

Me trataron de establecer el preprocesador definir

_CRTDBG_MAP_ALLOC

manualmente en las propiedades del proyecto, pero sólo sale esto:

Dumping objects -> 
{1466} normal block at 0x00BD4DD0, 40 bytes long. 
Data: <(o; ; (o; 1 > 28 6F 3B 00 90 A9 3B 00 28 6F 3B 00 00 D6 31 10 

sin números de línea. También traté de definir manualmente principal usando BOOST_TEST_NO_MAIN y volcar por mí mismo de esta manera:

int main(int argc, char* argv[]) 
{ 
    int res = ::boost::unit_test::unit_test_main(&init_function, argc, argv); 
    _CrtDumpMemoryLeaks(); 
    return res; 
} 

Pero también sin ningún éxito. ¿Cómo puede hacerse esto?

Respuesta

5

Usando Boost.Test puede utilizar --detect_memory_leaks = "número de asignación"

+0

¡Acepté este, ya que esto es aún mejor! – schoetbi

4

En MSVC se puede establecer un punto de interrupción para el número de asignación 1466, en el código:

_crtBreakAlloc = 1466 

o en la ventana Inspección puede agregar _crtBreakAlloc y el valor de 1466 una vez que se inició la aplicación (por supuesto se necesita un punto de interrupción en la función principal). More details on MSDN

+0

Esto lo resolvió. Gracias – schoetbi

0

intenta utilizar el depurador! Por ejemplo, con la ayuda de un delegador puede seleccionar la pila para ver dónde se asignó la memoria