scieee Science in your language
[es] (orig)

Construcción de un depurador portable de código. Funciones de la biblioteca. Ejemplo de uso del depurador (LSI-2000-03)

Abstract

En este cuarto artículo veremos las funciones que componen la biblioteca que constituye el depurador, veremos cual es el significado de cada una de estas funciones y cuando se aconseja su uso. Para finalizar veremos para un pequeño ejemplo el comportamiento del depurador.

Read accessible full text

Construcción de un depurador portable de código. Funciones de la biblioteca. Ejemplo de uso del depurador (LSI-2000-03)

Author: Arjona Fernández, José Luis; Prieto Pérez, José M.; Corchuelo Gil, Rafael
Year: 2000
Source: https://idus.us.es/bitstreams/ec6fb163-d7dd-4268-9a69-5e533c858989/download
&
216758&&,Ï1'(81'(385$'253257$%/('(&Ï',*2

)
81&,21(6'(/$%,%/,27(&$

(
-(03/2'(862'(/'(385$'25

José L. A jona Fe nández, José M. P ie o Pé ez, R. Co chuelo Gil
Dp o. de Lenguajes y Sis emas In o má icos
Facul ad de In o má ica y Es adí ica
Uni e sidad de Se illa
Web: h p://www.lsi.us.es
En es e cua o a ículo e emos las unciones que componen la biblio eca que cons i uye el
depu ado , e emos cual es el signi icado de cada una de es as unciones y cuando se aconseja su
uso. Pa a inaliza e emos pa a un pequeño ejemplo el compo amien o del depu ado .
)XQFLRQHVGHODELEOLRWHFDGHGHSXUDFLyQ
Cómo se comen o en el segundo de los a ículos, el depu ado de código es á cons i uido po
una biblio eca ANSI C. Pues aho a es el momen o de comen a las unciones necesa ias pa a hace
que el p og ama sea au odepu able. Además de gene a los s abs, el compilado debe de in e cala
en el código C gene ado, llamadas a las u inas del depu ado . En es e apa ado de alla emos el
signi icado de cada una de es as unciones que el compilado iene que inse a .
Los p o o ipos de las u inas que suminis a la biblio eca, son las siguien es:
oid debug_ini (cha * ich_s abs);
oid debug_link (cha *id, oid *di );
oid debug_open (cha *nomb e_ambi o);
oid debug_close ( oid);
oid debug_end ( oid);
oid debug_ ace (unsigned num_linea, cha * ich_ uen e);
Comen a emos aho a el sen ido de cada una de ellas:
½
GHEXJBLQLW
Es la u ina de inicialización del depu ado , es deci , se lee el iche o de los s abs, y se
inicializan odas las a iables in e nas usadas po el mismo. Sin una llamada a es a u ina, nada
unciona á en el depu ado . Po lo an o se á la p ime a unción que se ejecu a á de la lib e ía y del
p og ama uen e. Como pa áme o de en ada se le pasa el nomb e del iche o donde es án
almacenados los s abs.
La in o mación de s abs, después de analiza léxica y sin ác icamen e el iche o de s abs,
se á almacenada en o ma de á boles, o ganizada en ablas de símbolos (Una abla de símbolos pa a
cada ámbi o). Es deci , end emos en cada abla de símbolos una en ada po cada elemen o del
p og ama y pa a cada uno de es os elemen os almacena emos en o ma de á bol la in o mación de
depu ación (s ab).
½
GHEXJBOLQN
Pe mi e asocia a una a iable, cons an e o pa áme o una di ección de memo ia. Es necesa io que
se le asigne una di ección a odos es os obje os pa a que el depu ado conozca su posición en
memo ia y pueda abaja con ellos (calcula exp esiones, modi ica alo es, ...). Lo que ha íamos
se ía ac ualiza en la abla de símbolos co espondien e un campo que ha ía e e encia a la di ección
de ese elemen o. Si no se usa co ec amen e es a unción, el depu ado accede ía a posiciones de
memo ia que no se co esponde al obje o que es amos es udiando, lo que p o oca ía e ec os
imp edecibles.
El luga co ec o pa a coloca las llamada a
GHEXJBOLQN
es, den o de cada ámbi o, an es de
la p ime a llamada a la unción
GHEXJBWUDFH
pa a ese ámbi o y despúes de la llamada a
GHEXJBRSHQ
1.
Los pa áme os, pa a pode llama la son los siguien es: en p ime luga la cadena de
ca ác e es que iden i ica a ese obje o, seguidamen e se le da á la di ección de memo ia en la que se
encuen a.
½
GHEXJBRSHQ
Se u iliza pa a especi ica al depu ado que se ab e un nue o ámbi o. En ella lo que hacemos
es apila in o mación sob e dicho ámbi o en la pila de ablas de símbolos in e na del depu ado .
Es a ca ac e ís ica nos pe mi i á sopo a el anidamien o es á ico2 que poseen algunos lenguajes.
Como pa áme o acep a la cadena que iden i ica al ámbi o en el iche o de s abs.
½
GHEXJBFORVH
Cie a el ámbi o ac ual, po lo an o es necesa io llama a es a unción cada ez que se sale
de un ámbi o. En ella desapilamos la in o mación ace ca de ese ámbi o que apilabamos cuando se
llamó a la u ina con
GHEXJBRSHQ
.
El pa áme o que oma, es la cadena de ca ac e es que hace e e encia al nomb e del ámbi o
del que se es á saliendo.
½
GHEXJBHQG
Llamada que se ealiza al inal del p og ama y su obje i o es únicamen e libe a la memo ia
ocupada po las es uc u as in e nas del depu ado .
½
GHEXJBWUDFH
Es la llamada que se enca ga de la aza del p og ama, es deci , se enca ga á de decidi si se
iene que pa a el p og ama en ejecución pa a que el usua io pueda in oduci algún comando o si
1 El lec o pod ía pensa en hace las llamadas a
GHEXJBOLQN
en o o luga , po ejemplo, an es de hace la llamada a
GHEXJBRSHQ
, pe o en ese caso end íamos p oblemas a la ho a de depu a unciones ecu en es. Además si aún no se
ha abie o el ámbi o, ¿Cómo se encuen a el símbolo?.
2 El anidamien o es á ico hace e e encia a la p opiedad que ienen algunos lenguajes de p og amación (cómo PASCAL,
MODULA..), po la que den o de un p ocedimien o ó unción se pueden de ini o os p ocedimien os y unciones,
siendo isibles únicamen e pa a ese ámbi o.
po el con a io iene que segui ejecu ando el p og ama. También se enca ga á de analiza los
comandos del usua io y mos a á el esul ado de la e aluación de dichos comandos.
Veamos aho a un ejemplo comple o y un ejemplo de aza sob e él con el depu ado ya
cons uido:
Con es e ejemplo p e endemos cons ui la unción de Eule : “
'DGR XQ Q~PHUR HQWHUR
PD RUTXHFHUR$ODIXQFLyQGH(XOHUGHYXHOYHHOQ~PHURGHHQWHURVSRVLWLYRVLQIHULRUHVD$ TXH
DGHPiVVRQSULPRVFRQ$
”. Pa a sabe si dos núme os son p imos, nos basa emos en la siguien e
p opiedad: “
'RVQ~PHURVVRQSULPRVHQWUHV FXDQGRVXPi[LPRFRP~QGLYLVRUHVODXQLGDG
”. Pa a
implemen a la unción máximo común di iso usa emos el algo i mo de Euclides.
A con inuación mos amos el p og ama que hace lo an e io en PASCAL (Eule .pas):
1: PROGRAM FUNCION_DE_EULER;
2:
3: VAR nume o:INTEGER;
4:
5: FUNCTION Mcd(p,q:INTEGER):INTEGER;
6: VAR es o:INTEGER;
7: BEGIN
8: REPEAT
9: BEGIN
10: es o:= p MOD q;
11: p:=q;
12: q:= es o;
13: END;
14: UNTIL es o=0;
15: mcd:=p;
16: END;
17:
18: FUNCTION Eule (x:INTEGER):INTEGER;
19: VAR i,con ado :INTEGER;
20: BEGIN
21: con ado :=0;
22: FOR i:=1 TO x-1 DO
23: IF Mcd(x,i)=1 THEN
24: con ado :=con ado +1;
25: Eule :=con ado ;
26: END;
27:
28: BEGIN
29: WRITELN(’ NUMERO - FUNCION DE EULER’);
30: WRITELN;
31: nume o:=81;
32: WRITELN(nume o,’ - ’,Eule (nume o));
33: END.
El iche o de s abs que end ía que gene a el compilado se ía (Eule .s b):
[PASCAL_MAIN]
WRITELN "R "
nume o "Vi"
Mcd "Ri"
Eule "Ri"
[Mcd]
p "Pi"
q "Pi"
es o "Vi"
[Eule ]
x "Pi"
i "Vi"
con ado "Vi"
El iche o de código C, con las llamadas a la biblio eca del depu ado inse adas se ía (Eule .c):
#include <s dio.h>
#include "debug.h"
in nume o;
oid PASCAL_MAIN( oid);
in Mcd(in ,in );
in Eule (in );
oid main ( oid)
{
debug_ini ("eule .s b");
PASCAL_MAIN();
debug_end();
e u n;
}
oid PASCAL_MAIN( oid)
{
debug_open("PASCAL_MAIN");
debug_link("nume o", &nume o);
debug_ ace(29,"eule .pas");
p in (" NUMERO - FUNCION DE EULER");
p in (" n");
debug_ ace(30,"eule .pas");
p in (" n");
debug_ ace(31,"eule .pas");
nume o=81;
debug_ ace(32,"eule .pas");
p in ("%d - %d",nume o,Eule (nume o));
p in (“ n”);
debug_ ace(33,"eule .pas");
debug_close();
e u n;
}
in Mcd(in p,in q)
{
in es o;
debug_open("Mcd");
debug_link(" es o",& es o);
debug_link("p",&p);
debug_link("q",&q);
do {
debug_ ace(8,"eule .pas");
debug_ ace(10,"eule .pas");
es o= p % q;
debug_ ace(11,"eule .pas");
p = q;
debug_ ace(12,"eule .pas");
q = es o;
} while ( es o!=0);
debug_ ace(15,"eule .pas");
debug_close();
e u n p;
}
in Eule (in x)
{
in i,con ado ;
debug_open("Eule ");
debug_link("i",&i);
debug_link("con ado ",&con ado );
debug_link("x",&x);
debug_ ace(21,"eule .pas");
con ado = 0;
o (i=1;i<=(x-1);i++)
{
debug_ ace(22,"eule .pas");
debug_ ace(23,"eule .pas");
i (Mcd(x,i)==1)
{
debug_ ace(24,"eule .pas");
con ado = con ado + 1;
}
}
debug_ ace(25,"eule .pas");
debug_close();
e u n con ado ;
}
Vamos a usa el depu ado :
Depu ado simbólico de código po able. Ve sión 1.1
Copy igh (C) 1998. José Manuel P ie o Pé ez y José Luis A jona Fe nández
Tu o : Ra ael Co chuelo Gil.
Es e p og ama iene sin ningún ipo de GARANTIA;
pa a ob ene más de alles eclea 'show w'.
Es g a ui o y se e pe mi e y ag adece que lo
edis ibuya bajo cie as condiciones;
eclea 'show c' pa a más de alles.
* Ejecu emos en p ime luga algunas ins ucciones:
29: WRITELN(' NUMERO - FUNCION DE EULER');
(eule .pas:29)? nex
NUMERO - FUNCION DE EULER
30: WRITELN;
(eule .pas:30)? nex
31: nume o:=81;
(eule .pas:31)? nex
32: WRITELN(nume o,' - ',Eule (nume o));
* Vamos a cambia el alo del núme o al que se le calcula la unción de Eule :
(eule .pas:32)? wa ch nume o
(En e o) 81
(eule .pas:32)? se nume o = nume o - 71
(eule .pas:32)? wa ch nume o
(En e o) 10
* ¿Po qué línea íbamos?
(eule .pas:32)? line
32: WRITELN(nume o,' - ',Eule (nume o));
* ¿Qué es el obje o Eule ?
(eule .pas:32)? wha is Eule

Ru ina que de uel e En e o
* En emos en la unción Eule
(eule .pas:32)? nex
21: con ado :=0;
* Vamos a ob ene un poco más de in o mación:
(eule .pas:21)? wha is i
Va iable de ipo En e o
(eule .pas:21)? wha is x
Pa ame o de ipo En e o
* Nos pa a emos en la úl ima i e ación del bucle FOR exis en e en el cue po de la unción
* Eule :
(eule .pas:21)? b eak #22 i==x-1
(eule .pas:21)? b eak
Lis a B eakpoin s [eule .pas].
* linea #22
1: (i==(x-1))
(eule .pas:21)? un
22: FOR i:=1 TO x-1 DO
* Veamos que e dade amen e es la úl ima i e ación:
(eule .pas:22)? wa ch i
(En e o) 9
(eule .pas:22)? wa ch x-1
(En e o) 9
* En emos en Mcd:
(eule .pas:22)? nex
23: IF Mcd(x,i)=1 THEN
(eule .pas:23)? nex
8: REPEAT
* Veamos que es lo que de uel e la unción Mcd:
(eule .pas:8)? b eak #15
(eule .pas:8)? un
15: mcd:=p;
(eule .pas:15)? wa ch p
(En e o) 1
*Po an o se iene que i po la ama e dade a del condicional IF que es á en la unción
* Eule :
(eule .pas:15)? nex
24: con ado :=con ado +1;
* Exac amen e, aho a a po el esul ado inal!
(eule .pas:24)? un
10 - 4