lunes, 19 de octubre de 2009

DEPURACION DE PROGRAMAS

Depuración de programas es el proceso de identificar y corregir errores de programación.
En inglés se le conoce como debugging, ya que se asemeja a la eliminación de bichos (bugs), manera en que se conoce informalmente a los errores de programación. Se dice que el término bug proviene de la época de las computadoras de válvula termoiónicabulbos, en las cuales los problemas se generaban por los insectos que eran atraídos por las luces y estropeaban el equipo.





La depuración de un programa es la forma de saber si un programa contiene errores o no, así mismo también nos ayuda a corregir dichos errores.


Se dice que un programa esta depurado cuando esta libre de errores.


Cuando se depura un programa se hace un seguimiento del funcionamiento de dicho programa y se van estudiando los valores de las distintas variables, así como los resultados obtenidos en las operaciones.


Una vez depurado el programa se solucionan los posibles errores encontrados y se procede a depurar otra vez.


Estas acciones se repiten hasta que el programa no contiene ningún tipo de errores, tanto en tiempo de programación como en tiempo de ejecución.




“DEBUG”


El "Debug" es una utilidad de MS-DOS que permite visualizar memoria, introducir programas en ella y rastrear su ejecución. Una característica de debug es que despliega todo el código del programa en formato hexadecimal.


Es importante saber que muchos usos de este tipo de utilidades de bajo nivel, requieren un funcionamiento stand-alone, es decir, fuera de un sistema operativo multi-usuario, ya que éstos encapsulan y ocultan muchos aspectos del hardware.



Debug es Útil para:



  • Ensamblar pocas líneas de código

  • Des-ensamblar código en RAM, ROM y ejecutable

  • Correr paso-a-paso programas

  • Desplegar datos en memoria

  • Verificar estado de los registros del CPU

Comandos de debug:


El ingreso a "Debug" se realiza de forma sencilla a partir de la ventana de comandos de Windows, tipeando Debug. Luego aparcera el prompt que es un guión.
Para acceder a la ayuda escribimos "?" en donde tenemos la descripción de comandos.



  • A: ASSEMBLE [dirección]
    Parámetros:

Sin parámetros ensambla las instrucciones que se introduzcan, guardándolas en la dirección siguiente a la que se llegó en el último "a". Cuando se utiliza este comando se le puede dar como parámetro la dirección donde se desea que se inicie el ensamblado, si se omite el parámetro el ensamblado se iniciará en la localización especificada por CS:IP, usualmente 0100H, que es la localización donde deben iniciar los programas con extensión .COM, y será la localización que utilizaremos debido a que debug solo puede crear este tipo específico de programas.




  • COMPARE (C) C

Este comando compara y reporta diferencias entre los contenidos de dos bloques de memoria.
La sintaxis es:
es la dirección de inicio y fin de un bloque o, si se preceden con "L", la dirección de inicio y la longitud del bloque; es el inicio de otro bloque. Se presupone que la longitud de ambos bloques es la misma.




  • D: DUMP D [intervalo]
    Muestra el contenido de una zona de memoria en hexadecimal y en ASCII. Sin parámetros muestra los primeros 128 bytes a partir de la posición a la que se llegó en el último "d". Si se le da un rango, mostrará ese rango.





  • E DIRECCION: EDIT dirección [lista]

Parámetros: [lista de palabras a escribir]
Permite editar, byte por byte, una zona de memoria. Muestra -en hexadecimal- el byte de esa posición y permite escribir otro valor para cambiarlo. Pulsando espacio pasa al byte siguiente, dejando como estaba el anterior si no se ha cambiado, o guardando los cambios si sí se ha hecho. Para terminar la edición se pulsa INTRO.






  • F: FILL [lista de intervalos]
    Parámetros: ; Palabra con la que queremos rellenar

Llena una zona de memoria con un valor determinado. Como al terminar un programa la zona de memoria en que se residía no se borra (poniéndola a cero, por ejemplo), a menudo es útil para distinguir entre lo que son datos del programa actual y lo que es basura del anterior.





  • GO (G)
    Este comando ejecuta el código en memoria. Si se está depurando un programa, permite ejecutar el código cargado en memoria. También permite establecer puntos de quiebre (breakpoints) que son direcciones en las que se detiene la ejecución del programa.
    La sintaxis es: G = ...


  • Aritmética Hexadecimal (H)
    Este comando ejecuta restas y suma hexadecimales.
    La sintaxis es:
    H
    Como resultado de lo anterior, DEBUG regresa dos valores: la suma y la resta de los argumentos en hexa.
    Resultado:
    ; Es la suma ( + )
    ; es la resta ( - )





  • INPUT
    Este comando "jala" un byte de un puerto.
    La sintaxis es:
    I
    es la dirección del puerto a leer. Se lee el dato y se despliega en pantalla.



  • LOAD (L)
    Este comando se usa para cargar un archivo o sectores de disco a memoria.
    La sintaxis es:
    L


  • MOVE (M)
    Este comando mueve un bloque de memoria de una localidad a otra.
    La sintaxis es:
    M
    bloque de memoria
    es la dirección destino. El bloque de origen y la dirección destino pueden traslaparse.

  • NAME (N)
    Este comando se usa para especificar el nombre del archivo usado por los comandos LOAD y WRITE.
    La sintaxis es: N





  • OUTPUT (O)
    Este comando pone un byte en el puerto especificado.
    La sintaxis es:
    O
    es el byte hexadecimal a escribir en .
  • P: STEP P [=dirección] [número]
    Trace (T) puede ser incómodo si no se quiere depurar el código de las rutinas de interrupción o si ya se sabe el código que hay en las subrutinas y tan sólo interesa seguir avanzando sin entrar en ellas. En estos casos se usa p.



  • R: REGISTERS [registro]
    Sin parámetros, muestra el contenido de los registros de la CPU, así como la próxima instrucción a ejecutar."R [REGISTRO]" muestra el contenido del registro especificado y cambia el prompt de "-" a ":" invitando a que se cambie su valor , además muestra la instrucción apuntada por CS:IP. Pulsando Enter sin más lo deja como estaba.





  • SEARCH (S)
    Este comando permite buscar en un bloque de memoria una secuencia específica de valores.
    La sintaxis es:
    S

  • T: TRACE [=dirección] [valor]
    Ejecuta la instrucción apuntada por cs:ip y vuelve a debug. Permite ejecutar paso a paso un programa y observar en cada instrucción el efecto producido. Si haciendo "trace" se llega a una subrutina (CALL) o a una interrupción (INT) la siguiente instrucción que se ejecutará será la primera de la subrutina o la primera de la rutina de atención de la interrupción correspondiente.


  • El Comando 'U' ( UnAsemble o Desensamblado )

    Parámetros: -dir_comienzo- -dir_final-


    se desensamblan las direcciones de memoria a partir de
    CS: hasta CS: ( es opcional )



  • WRITE (W)
    Este comando se usa para escribir un archivo a sectores individuales de disco a disco.
    La sintaxis es:
    W


  1. La mayoría de los comandos de debug ejecutan una acción y vuelven al indicador del shell, pero si es un comando largo, como puede ser mostrar un trozo grande de código, puede detenerse pulsando CTRL-Pausa o interrumpirse con CTRL-C para volver al shell.


  2. Errores
    Cuando debug no sabe interpretar un comando, muestra un mensaje de error y un indicador "^" debajo del sitio del comando donde está el error.

Q: QUIT
Salir de debug y volver al DOS.





2 comentarios: