Tengo un puntero en GDB, ¿cómo puedo averiguar dónde se asignó por primera vez en el montón?En GDB, ¿cómo saber quién malloc'ed una dirección en el montón?
En WinDBG, esto se puede hacer por !heap -p -a <0x12345678>
después de encender gflags /i <*exe> +ust
Desde Valgrind me puede decir donde se asigna la memoria (cuando detecta algunas fugas), supongo que esto también es posible?
(no se trata de punto de observación. Esto se da la situación en la que rompo aleatoriamente en el En el BGF, la aplicación, mirar a un puntero y quieren saber "que creó este pedazo de la memoria"?)
el uso de depuración inversa en GDB es una forma novedosa y probablemente la correcta manera de resolver este problema. Encontré algún problema con ese enfoque con GDB 7.1, la última versión estable. La depuración inversa es una característica bastante nueva en GDB, así que tuve que echar un vistazo a HEAD (7.2) para solucionarlo.
Probablemente dice algo sobre la madurez del enfoque BGF pero creo que definitivamente se debe utilizar cuando es más maduro. (Característica impresionante!)
Gracias! Tanto su enfoque como ks1322 parecen válidos. Es útil conocer la depuración de la asignación mtrace y glib. Por otro lado, creo que el enfoque de ks1332 es más inteligente y probablemente esté más cerca de GDB (por lo tanto, el título de la pregunta). Voy a experimentar con ambos y ver cuál es mejor en la práctica antes de elegir una respuesta correcta. – kizzx2