Depurador de memoria - Memory debugger

Un depurador de memoria es un depurador para encontrar problemas de memoria de software, como pérdidas de memoria y desbordamientos de búfer . Estos se deben a errores relacionados con la asignación y desasignación de la memoria dinámica . Los programas escritos en lenguajes que tienen recolección de basura , como el código administrado , también pueden necesitar depuradores de memoria, por ejemplo, para pérdidas de memoria debido a referencias "vivas" en las colecciones.

Visión general

Los depuradores de memoria funcionan supervisando el acceso a la memoria, las asignaciones y la desasignación de memoria. Muchos depuradores de memoria requieren que las aplicaciones se recompilen con bibliotecas de asignación de memoria dinámica especiales, cuyas API son en su mayoría compatibles con las bibliotecas de asignación de memoria dinámica convencionales, o bien utilizan enlaces dinámicos. Electric Fence es un depurador que depura la asignación de memoria con malloc . Algunos depuradores de memoria (por ejemplo, Valgrind ) funcionan ejecutando el ejecutable en un entorno similar a una máquina virtual, monitoreando el acceso a la memoria, la asignación y la desasignación para que no se requiera una recompilación con bibliotecas especiales de asignación de memoria.

Encontrar problemas de memoria, como fugas, puede llevar mucho tiempo, ya que es posible que no se manifiesten excepto en determinadas condiciones. El uso de una herramienta para detectar el mal uso de la memoria hace que el proceso sea mucho más rápido y sencillo.

Dado que la utilización anormalmente alta de la memoria puede ser un factor que contribuya al envejecimiento del software , los depuradores de memoria pueden ayudar a los programadores a evitar anomalías en el software que agotarían la memoria del sistema de la computadora, asegurando así una alta confiabilidad del software incluso durante tiempos de ejecución prolongados .

Comparación con analizador estático

Algunas herramientas de análisis estático también pueden ayudar a encontrar errores de memoria. Los depuradores de memoria funcionan como parte de una aplicación mientras se ejecuta, mientras que el análisis de código estático se realiza analizando el código sin ejecutarlo. Estas diferentes técnicas encontrarán típicamente diferentes casos de problemas, y usarlas juntas produce el mejor resultado.

Lista de herramientas de depuración de memoria

Esta es una lista de herramientas útiles para la depuración de memoria. Un generador de perfiles se puede utilizar junto con un depurador de memoria.

Nombre SO Licencia Idiomas Técnica
Dirección Sanitizador Linux, Mac OS Libre / código abierto (LLVM) C, C ++. Instrumentación en tiempo de compilación (disponible en Clang y GCC ) y biblioteca especializada
Allinea DDT Linux, Blue Gene Comercial propietario C, C ++ y F90. También para programas paralelos en supercomputadoras Tiempo de ejecución: a través de enlaces dinámicos
AQtime Windows (Visual Studio, IDE de Embarcadero) Comercial propietario .NET, C ++, Java, Silverlight, JScript, VBScript Tiempo de ejecución
Bcheck Solaris
BoundsChecker Windows (Visual Studio) Comercial propietario C ++ Intercepta en tiempo de ejecución o tiempo de compilación
Daikon Unix, Windows, Mac OS X Libre / código abierto Java, C / C ++, Perl y Eiffel Detección invariante dinámica en tiempo de ejecución
Debug_new (técnica general) (técnica general) C ++ Anulación en tiempo de compilación
Deleaker Windows (independiente y complementos para Visual Studio, RAD Studio, Qt Creator, CLion) Comercial propietario C ++, .Net, Delphi Intercepciones en tiempo de ejecución
dmalloc Alguna Libre / código abierto C Anulación en tiempo de compilación
DynamoRIO § Dr. Memoria Android, Linux, Windows Código libre / abierto (LGPL y BSD) Alguna Intercepciones en tiempo de ejecución
Cerca eléctrica Unix Libre / código abierto (GPL) C, C ++ Anulación en tiempo de compilación
FASTMM4 Ventanas Libre / código abierto (GPL) Delphi Anulación en tiempo de compilación
IBM Rational Purify Unix, Windows Comercial propietario C ++, Java, .NET Tiempo de ejecución
Asegurar ++ Windows (complemento de Visual Studio), Unix Comercial propietario C, C ++ instrumentación de código fuente
Inspector de Intel Windows (Visual Studio), Linux Comercial propietario C, C ++, Fortran Tiempo de ejecución
libcwd Linux (gcc) Libre / código abierto C, C ++ Anulación en tiempo de compilación
libumem Solaris Incluido con Solaris Anulación del tiempo de enlace
Memwatch Cualquiera (biblioteca de programación) Libre / código abierto C Anulación en tiempo de compilación
mtrace Varios Libre / código abierto (LGPL) Biblioteca GNU C Accesos salidas integradas
MTuner Varios Gratis C, C ++ Intercepciones en tiempo de ejecución, anulación del tiempo de enlace (MSVC, Clang y GCC), detección de fugas
Oracle Solaris Studio (anteriormente Sun Studio Runtime Checking) Linux, Solaris Freeware patentado C, C ++, Fortran
OLIVER (APT internacional) MVS, MVS / EXA, DOS / VSE Software propietario Ensamblador de IBM Intercepciones en tiempo de ejecución, hipervisor - Tipo 2
TotalView Unix, Mac OS X Comercial propietario C, C ++, Fortran Tiempo de ejecución
Valgrind § Memcheck Linux, Mac OS, Android Libre / código abierto (GPL) Alguna Intercepciones en tiempo de ejecución
WinDbg Ventanas Freeware patentado C, C ++, .NET, Python Tiempo de ejecución

Ver también

Referencias

  • Michael C. Daconta: Punteros de C ++ y gestión de memoria dinámica , John Wiley & Sons, ISBN  0-471-04998-0
  • Andrew Koenig : C Traps and Pitfalls , Addison-Wesley, ISBN  0-201-17928-8

enlaces externos