Sistema de depuración de ejecución inversa
Descripción general
 Fácil depuración del programa. ] Para la depuración, el compilador 1 compila un programa de depuración en el que se inserta una instrucción para guardar datos almacenados en el área que se escribirá en la memoria de seguimiento inmediatamente antes de la instrucción para escribir en el registro o la memoria. La depuración continúa almacenando este programa de depuración en el archivo ejecutable 2 del usuario y ejecutándolo. Cuando se ejecuta un programa de depuración, cuando hay un error, la ejecución se detiene debido a la influencia. En las memorias de traza 3a y 3b, la dirección en la posición donde se detuvo la ejecución y los contenidos del registro y la memoria en ese momento se almacenan. Entonces, la herramienta de conversión de instrucciones 4 convierte el programa de depuración en la cadena de instrucciones para realizar la operación inversa en los datos del registro y la memoria. Al ejecutar esta secuencia de instrucciones paso a paso, es posible rastrear hacia atrás desde la posición donde se detuvo la ejecución.
Campo técnico
La presente invención se refiere a un sistema de depuración de ejecución inversa utilizado para depurar y evaluar un programa que opera en un microordenador.
Antecedentes de la técnica
En general, al depurar o evaluar un programa, el programa realmente opera en el microordenador y rastrea su funcionamiento. En tales rastros de operación, convencionalmente, se usaron varias herramientas y similares y se llevaron a cabo las siguientes operaciones. Por ejemplo, en una dirección determinada de un programa, cuando se detiene una operación de programa o cuando se desea verificar el pasaje, se establece un punto de interrupción en el medio del programa. Además, cuando desee rastrear varias instrucciones desde un punto de interrupción, use las instrucciones paso a paso y ejecute las instrucciones paso a paso. La información de rastreo que no es visible en estas funciones, por ejemplo, la medición de la frecuencia de la ejecución de una instrucción particular, etc. Medición del número de accesos dirección en la memoria, el propio programa o para herramientas de evaluación de depuración, que incorpore un mecanismo tal como un contador y banderas Estaba haciendo.
Además, con una herramienta de evaluación de depuración de alto rendimiento como ICE (InCircuit Emulator), es posible mantener el historial del pin de señal del microordenador en una cantidad fija en la memoria de rastreo. Se puede obtener más información de rastreo a partir del historial de estos pines de señal. Al analizar esta información de rastreo, fue posible conocer el historial de las instrucciones de ejecución y el estado del acceso a los datos. En cada una de estas técnicas convencionales, se ejecuta un programa desde una entrada de programa para obtener la información necesaria en el momento de la ejecución.
Tarea de solución
Sin embargo, las técnicas convencionales descritas anteriormente tienen los siguientes problemas. En primer lugar, para reproducir la parte que pasó una vez cuando se realiza el seguimiento de la operación del programa, no es eficiente porque tiene que volver a ejecutarse desde la entrada del programa una vez más. Esta situación ocurre frecuentemente cuando se depuran programas. Esto se debe a que muchos errores de programas aparecen en la superficie como un mal funcionamiento después de que ha pasado un cierto período de tiempo desde que pasaron la ubicación del error. En este caso, desde el momento del mal funcionamiento, fue necesario volver a ejecutar el programa desde la entrada del programa mediante la reemisión repetida de un punto de interrupción con el fin de captar la situación poco a poco.
En segundo lugar, la ejecución de un programa generalmente difiere dependiendo del contenido de los datos de entrada y el tiempo de entrada de los mismos, y en muchos casos, no es posible reproducir un evento una vez que ocurrió. Por lo tanto, cuando ocurre un mal funcionamiento debido a alguna causa, el mal funcionamiento no se puede reproducir y la depuración no se puede realizar en muchos casos, e incluso cuando se evalúa, el proceso del programa una vez ejecutado no se puede reproducir en muchos casos. En tercer lugar, incluso cuando se usa ICE, la ejecución de seguimiento de programas con referencia al historial de pines de señal del microordenador era una tarea muy difícil. En cuarto lugar, incluso con el uso de ICE, era prácticamente imposible reproducir completamente los valores de registros y memorias en puntos específicos de ejecución. Esto se debe a que para conocer los valores de los registros y las memorias sobrescritos durante la ejecución del programa, es necesario mantener todo el historial desde el inicio de la ejecución del programa.
Solución
El sistema de depuración de ejecución inversa de la presente invención se caracteriza por los siguientes puntos para resolver el problema anterior.
(1) 1. Basado en el programa almacenado en el archivo fuente del usuario, tiene un compilador para generar el siguiente programa de rastreo. Es decir, el compilador primero detecta cada comando de escritura para reescribir los datos en los medios de almacenamiento, como el registro y la memoria del programa. Luego, una instrucción de guardar para guardar los datos en el medio de almacenamiento inmediatamente antes de la ejecución del comando de escritura se agrega inmediatamente antes de la instrucción de escritura. Estas instrucciones de guardado son una instrucción de tienda, o una combinación de una instrucción de carga y una instrucción de tienda. Estas instrucciones de guardado se agregan como programas de seguimiento.
2. Tiene un archivo ejecutable de usuario que almacena el programa de rastreo generado por el compilador.
3. Una memoria de seguimiento para almacenar datos a ser salvados ejecutando la instrucción de salvar en el programa de rastreo almacenado en el archivo de ejecución del usuario y un historial de direcciones de instrucción del proceso de ejecución del programa de rastreo, respectivamente.
4. Se proporciona una herramienta de conversión de instrucciones para generar el siguiente programa de ejecución inversa basado en el programa de rastreo almacenado en el archivo de ejecución del usuario cuando se detiene la ejecución del programa de rastreo. Es decir, esta herramienta de conversión de instrucciones convierte cada instrucción en el programa de rastreo en una instrucción que realiza secuencialmente el procesamiento inverso de datos a partir de la instrucción de la última dirección de instrucción almacenada en la memoria de seguimiento, y la configura como un programa de ejecución inversa.
(2) En (1), la herramienta de conversión de instrucciones tiene las siguientes características.
1. Convierta cada instrucción de carga en el programa de rastreo en una instrucción de tienda.
2. Convierta cada instrucción de tienda en el programa de seguimiento en una instrucción de carga.
3. Convierta cada instrucción que actualice la dirección en el momento de guardar datos en la memoria de seguimiento en una instrucción que restablezca la dirección anterior.
4. Ignora otras instrucciones.
En la depuración, un compilador compila un programa de depuración en el que se inserta una instrucción para guardar datos almacenados en el área a escribir en la memoria de seguimiento inmediatamente antes de la instrucción para escribir en el registro o la memoria. La depuración continúa almacenando este programa de depuración en el archivo ejecutable del usuario y ejecutándolo. Cuando se ejecuta un programa de depuración, cuando hay un error, la ejecución se detiene debido a la influencia. En la memoria de seguimiento, la dirección en la posición donde se detuvo la ejecución y los contenidos del registro y la memoria en ese momento se almacenan. Luego, utilizando la herramienta de conversión de instrucciones, el programa de depuración se convierte en la secuencia de instrucciones que realiza la operación inversa en los datos del registro y la memoria. Como resultado, ejecutando esta secuencia de instrucciones paso a paso, es posible rastrear la operación de devolver la operación de ejecución en la dirección inversa desde la posición donde se detuvo la ejecución.
Descripción de las realizaciones preferidas A continuación, las realizaciones de la presente invención se describirán en detalle con referencia a los dibujos. La figura 1 es un diagrama de bloques de una realización de un sistema de depuración de ejecución inversa de la presente invención. La figura 1 muestra la configuración general de un sistema que incluye un depurador para depurar un programa de usuario que opera en un microprocesador (en lo sucesivo abreviado como MPU) en un sistema objetivo desde un servidor, y un compilador y una herramienta de conversión de instrucciones. 1, en el servidor 100, una memoria 103, un disco duro 105, una unidad de procesamiento central 101 (en lo sucesivo abreviada como CPU), un CRT 106, y una unidad de I / F 104 de un objetivo están conectados por un bus interno 102 Ahí Además, a la CPU 101, se conecta un teclado 107 para la entrada de un usuario y un mouse 108.
En el disco duro 105 en el servidor 100, un compilador 1 que es un programa que opera en la CPU 101 del servidor 100, un depurador 110, una herramienta de conversión de instrucciones 4, un archivo fuente 112 de un programa de usuario que opera en la MPU 301 en el objetivo, Y el archivo 2 ejecutable del usuario generado al compilarlo con el compilador 1 se almacena. El sistema de destino 300, monitor de depuración R0M304 309 está escrito, la memoria 305, MPU 301 opera el ejecutable de usuario 2, huella de memoria 3a y 3b rastrear memoria para almacenar el historial de ejecución de la 2 y la gestión de memoria de la unidad ejecutable de usuario 310, ( En lo sucesivo, abreviado como MMU) está montado. La unidad I / F 303 del sistema objetivo 300 está conectada a la unidad I / F 104 del servidor 100 a través de la interfaz 200 del depurador.
La MPU 301, la ROM 304, la memoria 305, la memoria de seguimiento 3a, la memoria de seguimiento 3b y la unidad de I / F 303 están conectadas por un bus interno 302 del sistema objetivo 300. La memoria de seguimiento 3b está conectada a la MPU 301 a través de un circuito de seguimiento de dirección de instrucción 308. Como resultado, el circuito de seguimiento de dirección de instrucción 308 mantiene el historial de direcciones de instrucciones de ejecución de la MPU 301 en la memoria de seguimiento 3b.
En este caso, el circuito de seguimiento de dirección de instrucción 308 usa la memoria de seguimiento 3b en forma de bucle para mantener el historial de direcciones de instrucciones de ejecución. Es decir, si se usa la última dirección de la memoria de rastreo 3b, el historial se retiene nuevamente desde la dirección superior. De esta manera, siempre es posible mantener el historial de direcciones de instrucciones de ejecución antes de que el programa se detenga a la capacidad de la memoria de seguimiento 3 b. La dirección de la memoria de seguimiento 3b que contiene la dirección de instrucción de ejecución en el momento de la detención del programa se mantiene en el registro de direcciones 311 de la memoria de seguimiento 3b como se muestra en la FIG.
El depurador 110 introduce un comando desde el teclado 107 o el mouse 108, y muestra el resultado en el CRT 106. Además, el depurador 110 lee el ejecutable usuario 2 por el comando de carga de programa de usuario, mediante la comunicación con el monitor de depuración 309 a través de interfaz de depuración 200, cargado en la memoria 305 del sistema de destino 300. Entonces, comunicándose con el monitor de depuración 309 a través de la interfaz de depuración 200, se ejecuta la orden del usuario.
A continuación, se describirá el funcionamiento del sistema descrito anteriormente. El compilador 1 puede agregar una instrucción para guardar valores del archivo ejecutable 2 del usuario que opera en el microordenador en el momento de la ejecución, valores antes del almacenamiento en un medio de almacenamiento tal como un registro, memoria, etc., por selección del operador. Los detalles de esta operación se describirán a continuación. Por ejemplo, se define la siguiente instrucción de adición de registro.
agregar% r1,% r2,% r3
Esta instrucción agrega el valor de% r1 y el valor de% r2 y lo almacena en% r3. Aquí,% r 1 y similares indican registros dentro de la MPU 301. Esta instrucción es una instrucción que implica escribir en el registro.
Además, los siguientes comandos están definidos.
sw% r1, [% r2]
Esta instrucción es una instrucción para almacenar el valor de% r 1 en la dirección de memoria del valor de% r 2 y es una instrucción que acompaña a la escritura en la memoria 305. De acuerdo con la selección por parte del usuario, el compilador 1 agrega una instrucción para guardar el valor antes de que el medio de almacenamiento sea escrito en la memoria de seguimiento 3a inmediatamente antes de dicho comando. Por ejemplo, cuando el usuario no selecciona 'agregar instrucciones de guardado' en el momento de compilar el archivo fuente del usuario 112, el compilador 1 genera la siguiente secuencia de instrucciones.
(A1) agregue% r1,% r2,% r3
(A2) sw% r1, [% r2]
Por otro lado, cuando el usuario selecciona 'agregar instrucciones de guardado', el compilador 1 realiza el proceso que se muestra en la figura 3 además del caso en el que no se selecciona 'agregar instrucciones de guardado'. Como resultado, se genera la siguiente secuencia de instrucciones.
(B 1) sw% r 3, [% wr 1]
(B 2) agregue% wr 1, 4,% wr 1
(B3) agregue% r1,% r2,% r3
(B4) lw [% r 2],% wr 2
(B 5) sw% wr 2, [% wr 1]
(B6) agrega% wr 1, 4,% wr 1
(B7) sw% r1, [% r2]
Aquí,% wr1,% wr2 es un registro de trabajo que el programa de usuario no usa. 'Lw [% r 2],% wr 2' es una instrucción para cargar el contenido de la dirección de memoria de% r 2 en% wr 2. Además,% wr 1 siempre apunta a la dirección de la memoria de seguimiento 3 a, y cuando se incrementa aún más desde la dirección final, la MMU 310 apunta a la dirección principal.
En el caso anterior, dado que el compilador 1 decide la instrucción (b 3) correspondiente a (a 1) y esta instrucción implica escribir en el registro% r 3, la instrucción (bl) para guardar el valor de registro escrito en la memoria de seguimiento 3 a Y se agrega una instrucción (b 2) para actualizar la dirección guardada. De manera similar, dado que se determina la instrucción (b 7) correspondiente a (a 2) y esta instrucción es una instrucción que implica escribir en la memoria, las instrucciones (b 4) y (b 5) para evacuar el valor de memoria escrito en la memoria de seguimiento 3a y evacuación (B6) para actualizar la dirección que se agregará. Como se describió anteriormente, es posible agregar selectivamente una instrucción para guardar valores en un medio de almacenamiento tal como un registro, una memoria y similares, en el que un programa que opera en un microordenador escribe un valor en el momento de la ejecución. Es decir, se puede agregar una instrucción de guardado por designación de opción del usuario.
A continuación, se explicará el trabajo de depuración por ejecución inversa. La herramienta de conversión de instrucciones 4 se usa junto con el archivo de ejecución de usuario 2 compilado seleccionando 'agregar instrucciones de guardado' en el compilador 1. Después de ejecutar el archivo ejecutable 2, la herramienta de conversión de instrucciones 4 usa el historial de comandos de ejecución almacenado en la memoria de seguimiento 3b y el valor guardado en la memoria de seguimiento 3a antes de guardarse en los medios de almacenamiento tales como un registro, una memoria, etc. , Comienza automáticamente desde el momento en que el archivo ejecutable 2 del usuario se detiene y genera automáticamente un archivo ejecutable del usuario para ejecutar la operación inversa del archivo ejecutable del usuario 2. Los detalles de este proceso se describirán a continuación. Se supone que el archivo 2 ejecutable del usuario que incluye la siguiente secuencia de instrucciones se genera como resultado de la compilación del archivo fuente del usuario 112, de modo que el compilador 1 agrega 'guardar instrucciones'.
(C 1) 0 × 0 fc sw% r 1, [% r 2]
(C 2) etiqueta 0 × 100 b
   
etiqueta:
(C 3) 0 × 200 sw% r 5, [% wr 1]
(C4) 0x204 agrega% wr 1, 4,% wr 1
(C 5) 0 × 208 agregar% r 3,% r 4,% r 5
(C 6) 0 × 20 c lw [% r 7],% wr 2
(C 7) 0 × 210 sw% wr 2, [% wr 1]
(C 8) 0 × 214 agregar% wr 1, 4,% wr 1
(C 9) 0 × 218 sw% r 6, [% r 7]
Aquí, 0xfc, 0x100, etc. son la dirección de la instrucción y 'b label' es una instrucción de bifurcación de la etiqueta. Suponga que como resultado de ejecutar este archivo ejecutable de usuario 2, la MPU 301 se detiene en la dirección de instrucción 0 × 218 y los contenidos de la memoria de seguimiento 3a y la memoria de seguimiento 3b del sistema de destino 300 en ese momento son los siguientes.
El contenido de la memoria de seguimiento 3a
(D1) 0x12345678
(D 2) 0 × 98765432
El contenido de la memoria de seguimiento 3 b
(E1) 0xfc
(E 2) 0 × 100
(E 3) 0 × 200
(E4) 0x204
(E 5) 0 × 208
(E 6) 0 × 20 c
(E 7) 0 × 210
(E 8) 0 × 214
(E 9) 0 × 218
Aquí,% wr 1 apunta a (d 2), y el registro de dirección 311 de la memoria de seguimiento 3 b apunta a (e 9). Los contenidos de la memoria de seguimiento 3a y la memoria de seguimiento 3b pueden almacenarse en el disco duro 105 mediante el depurador 110. La herramienta de conversión de instrucciones 4 usa los contenidos de la memoria de seguimiento 3a y la memoria de seguimiento 3b almacenada en el disco duro 105 y el archivo de ejecución de usuario 2 para generar un programa de ejecución inversa del archivo de ejecución de usuario 2 según el algoritmo de la figura 4. En el caso del ejemplo de la figura 4, se genera el siguiente programa de ejecución inversa. Aquí, el programa de ejecución inversa significa un programa que causa una transición de estado opuesta a la transición de estado de los medios de almacenamiento tal como un registro y una memoria cuando se opera el programa de usuario.
(F1) lw [% r7],% r6
(F2) sub% wr 1, 4,% wr 1
(F3) lw [% wr1],% wr2
(F 4) sw% wr 2, [% r 7]
(F 5) sub% wr 1, 4,% wr 1
(F 6) lw [% wr 1],% r 5
(F7) lw [% r2],% r1
Este proceso de generación se describirá con referencia a la FIG. En primer lugar, cuando se lee la instrucción (c9) de (e9) en el paso S41, se trata de una instrucción de almacenamiento, de modo que se genera la instrucción de carga opuesta (f1) (pasos S42 y S43). A continuación, cuando la instrucción (c8) se lee desde (e8) en los pasos S44 y S41, esta es una instrucción para actualizar la dirección que se guardará, por lo que se genera un comando (f2) para devolver la dirección guardada a uno (paso S46) . A continuación, se lee la instrucción (c7) de (e7), y como se trata de una instrucción de almacenamiento, se genera la instrucción de carga opuesta (f3). Lo que se genera de esta manera es el programa de ejecución inversa. Este programa funcionamiento de marcha atrás, el contenido de la memoria 305 y rastrear memoria 3a, dejar este estado cuando se detiene la ejecución del programa de usuario, ser operado por la carga de la inversa ejecutando el programa, registro, medios de memoria tales como un estado de memoria La transición se puede ejecutar en reversa.
Como se describió anteriormente, al usar el compilador 1 y la herramienta de conversión de instrucciones 4, es posible generar un programa de ejecución inversa que realiza una operación inversa desde que se detiene el programa de usuario, y utilizando el programa de ejecución inversa, Se puede realizar un rastreo inverso. El rastro inverso del programa es un método que no se ha hecho de manera convencional, y esto proporciona una herramienta de depuración revolucionaria. Es decir, es posible reproducir los valores de los registros y las memorias en un punto específico de un programa una vez que se haya ejecutado, y es posible realizar un seguimiento inverso ejecutando y deteniendo programas repetidamente, haciendo referencia a registros y valores de memoria. Esto facilita la localización de la causa del error y hace que la depuración sea más eficiente.
Debe observarse que la presente invención no está limitada a las realizaciones descritas anteriormente, y por supuesto son posibles diversas modificaciones. Por ejemplo, en la realización descrita anteriormente, se explica el caso de una instrucción de máquina cercana al hardware, pero la presente invención también se puede aplicar a la depuración de un programa de un lenguaje de alto nivel.
Efecto de la invención
Como se describió anteriormente, de acuerdo con el sistema de depuración de ejecución inversa de la presente invención, el programa de ejecución inversa se genera y se ejecuta por conversión de instrucción predeterminada, de modo que se obtienen los siguientes efectos. Es decir, cuando se realiza el rastreo de operación del programa, no es necesario volver a ejecutarlo desde la entrada del programa una vez más al reproducir la parte que ha pasado una vez, y es posible realizar un trabajo de depuración eficiente. Es decir, incluso si el punto de ruptura no se repite muchas veces, es posible captar la situación anterior paso a paso desde el momento en que se produce el mal funcionamiento. Además, incluso si los contenidos de ejecución del programa difieren dependiendo del contenido de los datos de entrada y el tiempo de entrada de los mismos, es posible reproducir el evento ocurrido en el pasado. Por lo tanto, cuando ocurre un mal funcionamiento debido a alguna causa, el mal funcionamiento se puede reproducir de manera confiable.
La figura 1 es un diagrama de bloques de una realización del sistema de depuración de ejecución inversa de la presente invención.
La figura 2 es un diagrama explicativo de una configuración de una memoria de seguimiento.
La figura 3 es un diagrama de flujo para explicar un procedimiento de procesamiento para agregar un comando de guardado.
La figura 4 es un diagrama de flujo para explicar un procedimiento de procesamiento de la herramienta de conversión de instrucciones.
1 compilador
2 archivo ejecutable de usuario
3a, 3b traza de memoria
4 Herramienta de conversión de instrucciones
Reclamo
Reivindicación 1 Un programa de rastreo al que se le agrega una instrucción de guardado para guardar datos en un medio de almacenamiento inmediatamente antes de la ejecución de cada instrucción de escritura en un programa almacenado en un archivo fuente del usuario inmediatamente antes de que se genere la instrucción de escritura Un archivo de ejecución de usuario para almacenar el programa de rastreo generado por el compilador, los datos que se guardarán mediante la ejecución de la instrucción de guardado en el programa de rastreo almacenado en el archivo de ejecución del usuario y la ejecución del programa de rastreo Una memoria de seguimiento para almacenar un historial de direcciones de instrucción de cada programa de rastreo almacenado en dicha memoria de seguimiento cuando dicha ejecución de dicho programa de rastreo se detiene, transfiriendo secuencialmente cada instrucción en dicho programa de seguimiento desde una instrucción de la última dirección de instrucción almacenada en dicha memoria de seguimiento. Un programa de ejecución inversa convertido en una instrucción para ser procesado A la inversa sistema de depuración de ejecución se caracteriza porque la herramienta una conversión de comandos para generar un haz.
2. Herramienta de conversión de instrucciones según la reivindicación 1, donde la herramienta de conversión de instrucciones convierte cada instrucción de carga en el programa de seguimiento en una instrucción de almacenamiento, convierte cada instrucción de almacenamiento en una instrucción de carga, actualiza cada dirección a guardar en la memoria de seguimiento a una Convierte la instrucción en una instrucción para regresar a la dirección anterior e ignora las instrucciones que no sean estas.
Dibujo :
Application number :1997-006647
Inventors :沖電気工業株式会社
Original Assignee :小山法孝、和宇慶康