
¿Qué estrategia utiliza al rastrear un problema relacionado con la memoria? ¿Qué herramientas utiliza (de código abierto y propietarias) para identificar pérdidas de memoria, corrupción de memoria, etc.? ¿Cómo realizaría un seguimiento de las pérdidas de memoria si solo gdb/dbx estuviera disponible en un sistema?
Para mí, solucionar las pérdidas de memoria sólo con un depurador es muy difícil.
Respuesta1
Si puedes cambiar el código fuente,dmalloces genial; enumerará qué punteros no se liberaron y (para el código creado con símbolos de depuración) exactamente en qué línea se asignaron.
Si no puedes,Valgrindes prácticamente el estándar para ese tipo de cosas. En general, encuentro que Valgrind es algo más difícil de usar, pero tiene muchas más funciones y no implica agregar llamadas dmalloc a su código.
Respuesta2
valgrind es increíblemente útil.
Respuesta3
Macizo(de valgrind) es una de las mejores formas de encontrar pérdidas de memoria. Repita su código sospechoso (o ejecute su programa el tiempo suficiente) y descargue el resultado con ms_print. Por lo general, la pila de llamadas le brinda suficiente información para solucionarlo.
Con GDB, puede intentar conectarse a un programa en ejecución y llamar a funciones comomalloc_stats()
Si su programa está escrito en un idioma diferente, podría resultar más complicado. Recientemente, algunos GDB han ganado capacidad de programación y la gente comenzó proyectos interesantes comomontón-gdb, que puede analizar la memoria de Python desde un volcado de núcleo. Podrían ser posibles scripts de análisis de memoria similares para objetos C++.
Leer tambiénhttps://stackoverflow.com/questions/2564752/examining-cc-heap-memory-statistics-in-gdb
Respuesta4
He estado usando Objective-C durante algún tiempo y hay un analizador que se ocupa de la gestión de memoria de nivel C y cosas así.Analizador estático ClangEs tan bueno que Apple decidió incluirlo en su IDE xCode. No estoy seguro de si esto es bueno para tu pregunta, pero si estás haciendo C entonces vale la pena intentarlo.