
Un depurador es un software que ejecuta un programa informático en un entorno que permite la inspección y el control a nivel de programación . Si bien se suele usar para depurar , también puede emplearse para otros fines, como las pruebas . Entre las funciones comunes de un depurador se incluyen la ejecución paso a paso del código, la interrupción del flujo de ejecución del programa, la gestión de puntos de interrupción y la generación de informes y la modificación de la memoria.
Un depurador de código fuente (también conocido como depurador simbólico ) ofrece una experiencia de usuario que integra el código fuente del programa . Normalmente, este tipo de depurador indica qué línea de código fuente corresponde al punto de ejecución del programa y permite leer y escribir en la memoria mediante los símbolos del código fuente. En cambio, un depurador de bajo nivel (también conocido como depurador de lenguaje máquina ) muestra el punto de ejecución como código máquina o su lenguaje ensamblador asociado y permite el acceso a la memoria únicamente por dirección.
El código que se va a examinar también podría ejecutarse en un simulador de conjunto de instrucciones (ISS), una técnica que ofrece gran capacidad para detenerse cuando se presentan condiciones específicas, pero que suele ser algo más lenta que ejecutar el código directamente en el procesador adecuado (o el mismo). Algunos depuradores ofrecen dos modos de funcionamiento, simulación completa o parcial, para minimizar este impacto.
Características
Por lo general, 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. [ 1 ] Los depuradores también ofrecen funciones más sofisticadas, como ejecutar un programa paso a paso ( ejecución paso a paso o animación del programa ), detener ( interrumpir ) (pausar el programa para examinar el estado actual) en algún evento o instrucción específica mediante un punto de interrupción , y rastrear los valores de las variables. [ 2 ] Algunos depuradores tienen la capacidad de modificar el estado del programa mientras se está ejecutando. También puede ser posible continuar la ejecución en una ubicación diferente del programa para evitar un fallo o un error lógico.
La misma funcionalidad que hace que un depurador sea útil para corregir errores permite que se utilice como herramienta de cracking de software para eludir la protección anticopia , la gestió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, análisis de cobertura de fallos y análisis de rendimiento , especialmente si se muestran las longitudes de las rutas de instrucción . [ 3 ]
La mayoría de los motores de depuración más utilizados, como gdb y dbx , ofrecen interfaces de línea de comandos basadas en consola . Los front-ends de depuración son extensiones populares de los motores de depuración que proporcionan integración con el IDE , animación de programas y funciones de visualización.
Manejo de errores del programa
Si un programa se está ejecutando con un depurador y se produce una excepción debido a un error de programación o a datos no válidos, el depurador recibe una notificación. Cuando el programa se detiene o alcanza una condición predefinida, el depurador suele mostrar la ubicación en el código original si se trata de un depurador de nivel fuente o simbólico. Si es un depurador de bajo nivel o de lenguaje 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 de código correspondiente del ensamblado o la compilación).
Grabación y reproducción de depuración
La depuración mediante grabación y reproducción [ 4 ] , también conocida como "grabación de ejecución de software" o "grabación de ejecución de programas", captura los cambios de estado de la aplicación y los almacena en disco a medida que se ejecuta cada instrucción del programa. Posteriormente, la grabación se puede reproducir y depurar de forma interactiva para diagnosticar y resolver defectos. La depuración mediante grabación y reproducción resulta ú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 la ejecución de un programa en el tiempo. Varios depuradores incluyen esta función. Microsoft Visual Studio (ediciones Ultimate 2010, 2012, 2013 y Enterprise 2015) ofrece la depuración inversa IntelliTrace para C#, Visual Basic .NET y 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; otros son software comercial propietario. Algunos depuradores inversos ralentizan el objetivo considerablemente, pero los mejores provocan una ralentización de 2× o menos. La depuración inversa es muy útil para ciertos tipos de problemas, pero no se usa comúnmente. [ 5 ]
Depuración de viajes en el tiempo
Además de las funciones de los depuradores inversos, la depuración mediante viaje en el tiempo también permite a los usuarios interactuar con el programa, modificar el historial si lo desean y observar cómo responde el programa.
dependencia del idioma
Algunos depuradores operan con un único lenguaje específico, mientras que otros pueden manejar varios lenguajes de forma transparente. Por ejemplo, si el programa principal está escrito en COBOL pero llama a subrutinas en lenguaje ensamblador y PL/1 , el depurador podría tener que cambiar de modo dinámicamente para adaptarse a los cambios de lenguaje a medida que se producen.
Protección de memoria
Algunos depuradores también incorporan protección de memoria para evitar errores de almacenamiento , como el desbordamiento de búfer . Esto puede ser extremadamente importante en entornos de procesamiento de transacciones , donde la memoria se asigna dinámicamente desde grupos de memoria para cada tarea.
Soporte de hardware para depuración
Algunos procesadores tienen soporte de hardware para ejecutar un programa paso a paso, como por ejemplo la bandera de trampa .
La mayoría de los microprocesadores modernos tienen al menos una de estas características en el diseño de su CPU para facilitar la depuración:
- Soporte de hardware para puntos de interrupción de código y datos , como comparadores de direcciones y comparadores de valores de datos o, con un trabajo considerablemente mayor, hardware de fallos de página . [ 6 ]
- La programación en el sistema permite que un depurador de hardware externo reprograme el sistema bajo prueba (por ejemplo, añadiendo o eliminando puntos de interrupción de instrucciones). Muchos sistemas con soporte para programación en el sistema también cuentan con otras funciones de depuración de hardware.
- Acceso JTAG a interfaces de depuración de hardware, como las de los procesadores con arquitectura ARM , o mediante el conjunto de comandos Nexus . Los procesadores utilizados en sistemas embebidos suelen ofrecer un amplio soporte para la depuración JTAG.
- Los microcontroladores con tan solo seis pines necesitan usar alternativas con pocos pines para JTAG, como BDM , Spy-Bi-Wire o debugWIRE en el Atmel AVR . DebugWIRE, por ejemplo, utiliza señalización bidireccional en el pin RESET.
Interfaces de depuración
Algunos de los depuradores más potentes y populares implementan únicamente una interfaz de línea de comandos (CLI), a menudo para maximizar la portabilidad y minimizar el consumo de recursos. Los desarrolladores suelen considerar que depurar mediante una interfaz gráfica de usuario (GUI) es más fácil y productivo. Por ello, existen interfaces visuales que permiten a los usuarios supervisar y controlar depuradores CLI a través de una interfaz gráfica . Algunas interfaces gráficas para depuradores están diseñadas para ser compatibles con diversos depuradores CLI, mientras que otras están dirigidas a un depurador específico.
Depuración ética o legal
La depuración se utiliza a menudo para piratear software ilegalmente, lo cual suele ser ilegal incluso sin mala intención. Los programas de depuración (crackme) están diseñados específicamente para ser pirateados. Estos programas permiten a quienes poseen depuradores practicar sus habilidades sin incurrir en problemas legales.
Véase también
Referencias
Citas
- ↑ Aggarwal y Kumar 2003 , pág. 302.
- ↑ Aggarwal y Kumar 2003 , pág. 301.
- ↑ Aggarwal y Kumar 2003 , págs. 307–312.
- ↑ O'Callahan, Robert; Jones, Chris; Froyd, Nathan; Huey, Kyle; Noll, Albert; Partush, Nimrod (2017). "Informe técnico extendido sobre grabación y reproducción de ingeniería para la capacidad de despliegue". arXiv : 1705.05937 [ cs.PL ].
- ↑ Philip Claßen; Undo Software. "¿Por qué se usa raramente la depuración inversa?" . Programmers Stack Exchange . Stack Exchange, Inc . Consultado el 12 de abril de 2015 .
- ↑ Aggarwal y Kumar 2003 , págs. 299–301.
Fuentes
- Sanjeev Kumar Aggarwal; M. Sarath Kumar (2003). «Depuradores para lenguajes de programación». En YN Srikant; Priti Shankar (eds.). Manual de diseño de compiladores: optimizaciones y generación de código máquina . Boca Raton, Florida: CRC Press . pp. 295–327 . ISBN 978-0-8493-1240-3.
- Jonathan B. Rosenberg (1996). Cómo funcionan los depuradores: algoritmos, estructuras de datos y arquitectura . John Wiley & Sons . ISBN 0-471-14966-7.
Enlaces externos
- Herramientas de depuración para Windows
- OpenRCE: Diversos recursos y complementos para depuración
- IntelliTrace para Visual Studio Enterprise (C#, Visual Basic, C++)
- Depuradores
- Depuración
- Tipos de software de utilidad