Depurador

Programa de computadora utilizado para probar y depurar otros programas.
Winpdb se depura a sí mismo

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 objetivo en condiciones controladas que permitan al programador realizar un seguimiento de su ejecución y supervisar los cambios en los recursos informáticos que puedan indicar un código que funciona mal. Las funciones de depuración típicas incluyen la capacidad de ejecutar o detener el programa objetivo 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 el contenido de la memoria o los registros para introducir datos de prueba seleccionados que podrían ser la causa de una ejecución defectuosa del programa.

El código que se va a examinar podría ejecutarse alternativamente 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 lenta que ejecutar el código directamente en el procesador apropiado (o en el mismo). Algunos depuradores ofrecen dos modos de funcionamiento, simulación completa o parcial, para limitar este impacto.

Una " trampa " ocurre cuando el programa no puede continuar normalmente debido a un error de programación o datos no válidos. Por ejemplo, el programa podría haber intentado usar una instrucción no disponible en la versión actual de la CPU o haber intentado acceder a una memoria no disponible o protegida . Cuando el programa "trampa" 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 un depurador simbólico , que ahora se ven comúnmente en entornos de desarrollo integrados . 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 del código del ensamblaje o la compilación).

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 ( paso a paso o animación del programa ), detener ( breaking ) (pausar el programa para examinar el estado actual) en algún evento o instrucción especificada por medio de 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 en el programa para evitar un bloqueo o un error lógico.

La misma funcionalidad que hace que un depurador sea útil para corregir errores permite que se lo utilice como una herramienta de descifrado de software para evadir la protección de copia , la administración de derechos digitales y otras funciones de protección de software. A menudo también lo hace útil como una herramienta de verificación general, cobertura de fallas y analizador de rendimiento , especialmente si se muestran las longitudes de las rutas de instrucciones . [3] Los primeros microordenadores con almacenamiento basado en disco a menudo se beneficiaban de la capacidad de diagnosticar y recuperar registros de datos de registro o directorio dañados, de "recuperar" archivos marcados como eliminados o descifrar la protección de contraseñas de archivos.

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 ofrecen integración con IDE , animación de programas y funciones de visualización.

Grabar y reproducir la depuración

La depuración mediante grabación y reproducción , [4] también conocida como "grabación de vuelo de software" o "grabación de ejecución de programa", captura los cambios en el estado de la aplicación y los almacena en el disco a medida que se ejecuta cada instrucción en un programa. La grabación puede reproducirse una y otra vez y depurarse de forma interactiva para diagnosticar y resolver defectos. La depuración mediante 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 característica 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 característica. Microsoft Visual Studio (edición Ultimate 2010, Ultimate 2012, Ultimate 2013 y Enterprise 2015) ofrece depuración inversa IntelliTrace para C#, Visual Basic .NET y algunos otros lenguajes, pero no 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 en órdenes de magnitud, pero los mejores depuradores inversos causan una ralentización de 2× o menos. La depuración inversa es muy útil para ciertos tipos de problemas, pero todavía no se utiliza comúnmente. [5]

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 observar cómo responde el programa.

Dependencia del lenguaje

Algunos depuradores funcionan en un único lenguaje específico, mientras que otros pueden manejar varios lenguajes de forma transparente. Por ejemplo, si el programa de destino principal está escrito en COBOL pero llama a subrutinas de lenguaje ensamblador y a subrutinas PL/1 , el depurador puede tener que cambiar de modo dinámicamente para adaptarse a los cambios de lenguaje a medida que se producen.

Protección de la memoria

Algunos depuradores también incorporan protección de memoria para evitar violaciones de almacenamiento, como 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 en función de cada tarea.

Soporte de hardware para depuración

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 ejecutar un programa paso a paso, como el indicador de trampa .
  • Un conjunto de instrucciones que cumple con los requisitos de virtualización de Popek y Goldberg facilita la escritura de software de depuración que se ejecuta en la misma CPU que el software que se está depurando; dicha CPU puede ejecutar los bucles internos del programa bajo prueba a toda velocidad y aún permanecer bajo el control del depurador.
  • La programación en el sistema permite que un depurador de hardware externo reprograme un sistema bajo prueba (por ejemplo, agregando o eliminando puntos de interrupción de instrucciones). Muchos sistemas con este soporte de ISP también tienen soporte de depuración de hardware.
  • 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 mucho más trabajo involucrado, hardware de falla de página . [6]
  • Acceso JTAG a interfaces de depuración de hardware como las de los procesadores de arquitectura ARM o mediante el conjunto de comandos Nexus . Los procesadores utilizados en sistemas integrados suelen tener un amplio soporte de depuración JTAG.
  • Los microcontroladores con tan solo seis pines necesitan utilizar sustitutos de JTAG con un número reducido de pines, 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-ends 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 generalmente consideran que la depuración a través de una interfaz gráfica de usuario (GUI) es más fácil y productiva. [ cita requerida ] Esta es la razón de las interfaces visuales, que permiten a los usuarios monitorear y controlar depuradores subordinados solo de CLI a través de una interfaz gráfica de usuario . Algunas interfaces de depuración GUI están diseñadas para ser compatibles con una variedad de depuradores solo de CLI, mientras que otras están dirigidas a un depurador específico.

La depuración se utiliza a menudo para piratear o descifrar software de forma ilegal, lo que suele ser ilegal incluso cuando se hace de forma no maliciosa. Los programas Crackme están diseñados específicamente para ser pirateados o depurados. Estos programas permiten a quienes tienen depuradores practicar su capacidad de depuración sin meterse en problemas legales.

Lista de depuradores

Algunos depuradores ampliamente utilizados son:

Los depuradores de minicomputadoras más antiguos incluyen:

Los depuradores de mainframe incluyen:

Véase también

Referencias

Citas

  1. ^ Aggarwal y Kumar, pág. 302.
  2. ^ Aggarwal y Kumar 2003, pág. 301.
  3. ^ Aggarwal y Kumar, págs. 307-312.
  4. ^ O'Callahan, Robert; Jones, Chris; Froyd, Nathan; Huey, Kyle; Noll, Albert; Partush, Nimrod (2017). "Informe técnico ampliado sobre registro y reproducción de ingeniería para la capacidad de implementación". arXiv : 1705.05937 [cs.PL].
  5. ^ Philip Claßen; Undo Software. "¿Por qué rara vez se utiliza la depuración inversa?". Stack Exchange de programadores . Stack Exchange, Inc. Consultado el 12 de abril de 2015 .
  6. ^ 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.). The Compiler Design Handbook: Optimizations and Machine Code Generation . Boca Raton, Florida: CRC Press . págs. 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.
  • Herramientas de depuración para Windows
  • OpenRCE: diversos recursos y complementos de depuración
  • IntelliTrace MSDN, Visual Studio 2015
Retrieved from "https://en.wikipedia.org/w/index.php?title=Debugger&oldid=1239252627"