Este artículo tiene varios problemas. Ayúdenos a mejorarlo o a discutir estos problemas en la página de discusión . ( Aprenda cómo y cuándo eliminar estos mensajes )
|
Part of a series on |
Software development |
---|
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).
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.
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.
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]
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.
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.
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.
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:
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.
Algunos depuradores ampliamente utilizados son:
Los depuradores de minicomputadoras más antiguos incluyen:
Los depuradores de mainframe incluyen: