Estoy usando rutinas de detección de pérdida de memoria de Visual CRT desde <crtdbg.h>
; cuando llamo _CrtDumpMemoryLeaks
una asignación se informó consistentemente en cada llamada del programa:¿Por qué _CrtSetBreakAlloc podría no causar un punto de interrupción?
{133} normal block at 0x04F85628, 56 bytes long.
Data: < > B0 81 F8 04 B0 81 F8 04 B0 81 F8 04 CD CD CD CD
La dirección varía, pero {133}
es siempre la misma.
De acuerdo con las instrucciones del MSDN en How to set breakpoints on memory allocation number, yo debería ser capaz de establecer un punto de interrupción en la asignación de 133 ° con esta llamada:
_CrtSetBreakAlloc(133);
y yo también se puede verificar en la ventana de reloj que {,,msvcr90d.dll}_crtBreakAlloc
es de hecho establece en 133 Después de que el programa finaliza, el informe de fugas aún muestra el n. ° 133 (junto con algunos números más altos), pero no se produce ningún punto de interrupción. ¿Por qué podría ser esto y cómo puedo obtener el punto de interrupción?
información potencialmente relevante:
- VS2008, utilizando el CRT "multi-hilo de depuración DLL"
- Mi código es un archivo DLL que se carga mediante un producto de terceros
- puntos de ruptura "normal" funciona bien; caminar funciona bien;
__asm int 3
funciona bien también. - Ningún otro valor para
_crtBreakAlloc
provoca un punto de interrupción o bien (no los que he intentado de todas formas) 133 es el número más bajo en el informe de fugas
Supongo que ese es el beneficio de poner un punto de interrupción al principio de su programa, luego configure {,, msvcr90d.dll} _crtBreakAlloc a 133 en lugar de llamar a _CrtSetBreakAlloc (133); aunque no estoy seguro de que este comentario sea aplicable en su situación. :) De todos modos, me alegro de que se haya resuelto. – Gyuri
Para su información, una manera fácil (y común) de que esto ocurra es si su asignación es estática. P.ej. Hiciste un 'std :: vector' en el alcance del archivo. – imallett