it-swarm-es.com

Cómo rastrear / solucionar un problema relacionado con la memoria en un código C / C ++ grande en * NIX Systems

¿Qué estrategia que usa al rastrear un problema relacionado con la memoria? ¿Qué herramientas utiliza (código abierto y propietario) para identificar fugas de memoria, corrupción de memoria, etc.? ¿Cómo rastrearía las fugas de la memoria si solo GDB/DBX esté disponible en un sistema?

Para mí, la fijación de fugas de memoria con solo un depurador es muy difícil.

9
Hemant

Si puede cambiar el código fuente, Dmalloc es genial; Enumerará qué punteros no se encontraban y (para que el código se construyó con símbolos de depuración) exactamente en qué línea se asignaron.

Si no puede, Valgrind es prácticamente el estándar para ese tipo de cosas. Generalmente encuentro a Valgrind algo más difícil de usar, pero tiene más características y no implica agregar llamadas DMALLOC en su código

12
Michael Mrozek

macizo (de Valgrind) es una de las mejores maneras de encontrar fugas de memoria. Repita su código sospechoso (o ejecute su programa lo suficientemente largo) y voltee el resultado con MS_PRINT. Por lo general, la pila de llamadas le está dando suficiente información para solucionarla.

Con GDB, puede intentar adjuntar a un programa en ejecución y funciones de llamada, como malloc_stats()

Si su programa está escrito en un idioma diferente, podría ser más complicado. Recientemente, algunos GDB han ganado la guionabilidad, y las personas comenzaron a proyectos interesantes, como GDB-montones , que pueden analizar Python Memoria de un volcado de núcleo. Memoria similar Analysys Scripts podrían Ser posible para los objetos C++.

Leer también https://stackoverflow.com/questions/2564752/examining-c-c-heap-memory-statistics-in-gdb

2
elmarco

Para Solaris, hay varias herramientas enumeradas en las respuestas a esta pregunta de StackOverFlow (incluyen la verificación de fugas con otras formas de acceso de memoria incorrecta).

1
alanc

He estado haciendo objetivos-C durante algún tiempo, y hay un analizador que se ocupa de la gestión de la memoria de nivel C y las cosas así. Clang STATIC Analyzer es tan bueno que Apple decidió agruparlo con su IDE Xcode. No estoy seguro de si esto es bueno para su pregunta, pero si está haciendo c, entonces vale la pena intentarlo.

1
phunehehe