Depurador de memoria - Memory debugger
Ejecución del programa |
---|
Conceptos generales |
Tipos de codigo |
Estrategias de compilación |
Tiempos de ejecución notables |
|
Compiladores y cadenas de herramientas notables |
|
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
- Elaboración de perfiles (programación informática)
- Lista de herramientas de análisis de rendimiento
- Depurador
- Detección de errores en tiempo de ejecución
- Pruebas de software
- Ingeniería de software
- Programación de computadoras
- Volcado de memoria
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
- " Cazando errores de memoria " por Ivan Skytte Jørgensen
- " Comparación de las fichas de memoria libres " de Jean-Philippe Martin