Depurador
Un depurador o herramienta de depuración es un programa informático que se utiliza para probar y depurar otros programas (el programa "objetivo"). El uso principal de un depurador es ejecutar el programa de destino en condiciones controladas que permiten al programador realizar un seguimiento de su ejecución y monitorear los cambios en los recursos de la computadora que pueden indicar un código que no funciona correctamente. Las funciones típicas de depuración incluyen la capacidad de ejecutar o detener el programa de destino en puntos específicos, mostrar el contenido de la memoria, los registros de la CPU o los dispositivos de almacenamiento (como las unidades de disco) y modificar la memoria o registrar el contenido para ingresar datos de prueba seleccionados que podrían ser una causa de la ejecución defectuosa del programa.
El código que se va a examinar también podría estar ejecutándose en un simulador de conjunto de instrucciones (ISS), una técnica que permite una gran potencia en su capacidad de detenerse cuando se encuentran condiciones específicas, pero que normalmente será algo más lento que ejecutar el código directamente en el procesador apropiado (o el mismo). Algunos depuradores ofrecen dos modos de operación, simulación total o parcial, para limitar este impacto.
Una "trampa" ocurre cuando el programa normalmente no puede continuar debido a un error de programación o datos no válidos. Por ejemplo, es posible que el programa haya intentado usar una instrucción que no está disponible en la versión actual de la CPU o que haya intentado acceder a la memoria no disponible o protegida. Cuando el programa "atrapa" o alcanza una condición preestablecida, el depurador generalmente muestra la ubicación en el código original si es un depurador de nivel de fuente o depurador simbólico, comúnmente visto ahora en entornos de desarrollo integrado. Si es un depurador de bajo nivel o un depurador de lenguaje de máquina, muestra la línea en el desensamblado (a menos que también tenga acceso en línea al código fuente original y pueda mostrar la sección apropiada de código del ensamblado o compilación).
Características
Normalmente, los depuradores ofrecen un procesador de consultas, un solucionador de símbolos, un intérprete de expresiones y una interfaz de soporte de depuración en su nivel superior. Los depuradores también ofrecen funciones más sofisticadas, como ejecutar un programa paso a paso (paso único o animación del programa), detener (romper) (pausar el programa para examinar el estado actual) en algún evento o instrucción específica por medio de un punto de interrupción, y rastreando los valores de las variables. Algunos depuradores tienen la capacidad de modificar el estado del programa mientras se está ejecutando. También es posible continuar la ejecución en una ubicación diferente del programa para evitar un bloqueo o un error lógico.
La misma funcionalidad que hace que un depurador sea útil para corregir errores permite usarlo como una herramienta de descifrado de software para evadir la protección contra copias, la administración de derechos digitales y otras funciones de protección de software. A menudo, también lo hace útil como herramienta de verificación general, cobertura de fallas y analizador de rendimiento, especialmente si se muestran las longitudes de ruta de instrucciones. Las primeras microcomputadoras con almacenamiento basado en disco a menudo se beneficiaban de la capacidad de diagnosticar y recuperar directorios dañados o registros de datos de registro, para "recuperar" archivos marcados como eliminados, o para descifrar la protección de contraseña de archivos.
La mayoría de los principales motores de depuración, como gdb y dbx, proporcionan interfaces de línea de comandos basadas en consola. Los front-end de depuración son extensiones populares de los motores de depuración que proporcionan funciones de integración, animación de programas y visualización de IDE.
Depuración de grabaciones y reproducciones
Depuración de grabaciones y reproducciones, también conocida como "grabación de vuelos de software" o "grabación de la ejecución del programa", captura los cambios de estado de la aplicación y los almacena en el disco a medida que se ejecuta cada instrucción en un programa. Luego, la grabación se puede reproducir una y otra vez y se puede depurar de forma interactiva para diagnosticar y resolver defectos. La depuración de grabación y reproducción es muy útil para la depuración remota y para resolver defectos intermitentes, no deterministas y otros defectos difíciles de reproducir.
Depuración inversa
Algunos depuradores incluyen una función llamada "depuración inversa", también conocida como "depuración histórica" o "depuración hacia atrás". Estos depuradores permiten retroceder en el tiempo la ejecución de un programa. Varios depuradores incluyen esta función. Microsoft Visual Studio (2010 Ultimate edition, 2012 Ultimate, 2013 Ultimate y 2015 Enterprise edition) ofrece depuración inversa de IntelliTrace para C#, Visual Basic.NET y algunos otros lenguajes, pero no para C++. También existen depuradores inversos para C, C++, Java, Python, Perl y otros lenguajes. Algunos son de código abierto; algunos son software comercial patentado. Algunos depuradores inversos ralentizan el objetivo en órdenes de magnitud, pero los mejores depuradores inversos provocan una ralentización de 2 veces o menos. La depuración inversa es muy útil para ciertos tipos de problemas, pero aún no se usa comúnmente.
Depuración de viajes en el tiempo
Además de las características de los depuradores inversos, la depuración de viajes en el tiempo también permite a los usuarios interactuar con el programa, cambiar el historial si lo desean y ver cómo responde el programa.
Dependencia del idioma
Algunos depuradores funcionan en un solo idioma específico, mientras que otros pueden manejar varios idiomas de forma transparente. Por ejemplo, si el programa de destino principal está escrito en COBOL pero llama a subrutinas de lenguaje ensamblador y subrutinas PL/1, es posible que el depurador tenga que cambiar de modo dinámicamente para acomodar los cambios en el lenguaje a medida que ocurren.
Protección de memoria
Algunos depuradores también incorporan protección de memoria para evitar infracciones de almacenamiento, como el desbordamiento del búfer. Esto puede ser extremadamente importante en los entornos de procesamiento de transacciones donde la memoria se asigna dinámicamente desde los 'grupos' de memoria. en una base de tarea por tarea.
Soporte de hardware para depuración
La mayoría de los microprocesadores modernos tienen al menos una de estas funciones en el diseño de su CPU para facilitar la depuración:
- Soporte de hardware para un solo sistema de un programa, como la bandera trampa.
- Un conjunto de instrucciones que cumple con los requisitos de virtualización de Popek y Goldberg hace más fácil escribir software de depurador que se ejecuta en la misma CPU que el software que está siendo depurado; tal CPU puede ejecutar los lazos internos del programa bajo prueba a toda velocidad, y todavía permanecen bajo control de depurador.
- La programación en el sistema permite que un depurador de hardware externo reprograme un sistema bajo prueba (por ejemplo, añadiendo o eliminando puntos de instrucción). Muchos sistemas con este soporte de ISP también tienen otro soporte de depuración de hardware.
- Apoyo de hardware para los puntos de ruptura de códigos y datos, como la administración pública utilizada en la comparación y los comparadores del valor de los datos o, considerablemente más trabajo, hardware de falla de página.
- Acceso JTAG a interfaces de depuración de hardware, como aquellas en procesadores de arquitectura ARM o utilizando el conjunto de comandos Nexus. Los procesadores utilizados en sistemas integrados suelen tener un amplio soporte de depuración JTAG.
- Micro controladores con tan pocos como seis pines necesitan utilizar substitutos de baja cuenta de pin para JTAG, como BDM, Spy-Bi-Wire, o debugWIRE en el AVR de Atmel. DebugWIRE, por ejemplo, utiliza señalización bidireccional en el pin RESET.
Front-end del depurador
Algunos de los depuradores más capaces y populares implementan solo una interfaz de línea de comandos (CLI) simple, a menudo para maximizar la portabilidad y minimizar el consumo de recursos. Los desarrolladores suelen considerar la depuración a través de una interfaz gráfica de usuario (GUI) más fácil y productiva. Esta es la razón de los front-end visuales, que permiten a los usuarios monitorear y controlar los depuradores subordinados solo de CLI a través de la interfaz gráfica de usuario. Algunos front-end de depuradores de GUI están diseñados para ser compatibles con una variedad de depuradores solo de CLI, mientras que otros están destinados a un depurador específico.
Lista de depuradores
Algunos depuradores ampliamente utilizados son:
- Arm DTT, formerly known as Allinea DDT
- Eclipse debugger API utilizado en una gama de IDE: Eclipse IDE (Java) Nodeclipse (JavaScript)
- Firefox JavaScript debugger
- GDB - el depurador GNU
- LLDB
- Microsoft Visual Studio Debugger
- Radare2
- Valgrind
- WinDbg
Los depuradores de minicomputadoras anteriores incluyen:
- Técnica dinámica de depuración (DDT)
- Herramienta de depuración en línea (ODT)
Los depuradores de mainframe incluyen:
- CA/EZTEST
Contenido relacionado
Rotación de árboles
Menú de contexto
Modulación por cambio de fase