scieee Science in your language
[es] (orig)

Construcción de un depurador portable de código. Una visión general (LSI-2000-03)

Abstract

En esta serie de artículos presentaremos una de las herramientas más codiciadas por los programadores, el Depurador de Código. En este primer artículo se dará una visión global de que es un depurador y de las posibilidades que le ofrece al programador; se explicará el funcionamiento de los depuradores existentes y la característica más importante del depurador que pretendemos construir: la portabilidad

Read accessible full text

Construcción de un depurador portable de código. Una visión general (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/c4d1bb7e-429a-4939-9378-e21162eb2192/download
&
216758&&,Ï1'(81'(385$'253257$%/('(&Ï',*2

8
1$9,6,Ï1*(1(5$/
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 a se ie de a ículos p esen a emos una de las he amien as más codiciadas po los
p og amado es, el Depu ado de Código. En es e p ime a ículo se da á una isión global de que es
un depu ado y de las posibilidades que le o ece al p og amado ; se explica á el uncionamien o de
los depu ado es exis en es y la ca ac e ís ica más impo an e del depu ado que p e endemos
cons ui :
ODSRUWDELOLGDG
.
¢4XpHVXQGHSXUDGRUSRUWDEOHGHFyGLJR"
Una de las inquie udes más impo an es pa a los p og amado es ha sido la ealización de
p og amas lib es de e o es, es deci , desa olla p og amas que uncionen co ec amen e
a endiendo a unas especi icaciones iniciales. Dado que es imposible a p io i esc ibi p og amas sin
e o es, necesi amos de he amien as que sean capaces de acili a nos la de ección y eliminación de
los e o es, es deci , apa ece la idea del depu ado de código.
El depu ado de código es una de las he amien as más ap eciadas que acompañan al
compilado y pe mi i á que el usua io del compilado pueda depu a simbólicamen e sus p og amas,
es deci , pod á de ec a y co egi e o es.
El depu ado de código nos pe mi i á e lo que ocu e den o del p og ama cuando és e se
ejecu a, es deci , nos pe mi i á segui la e olución del es ado del p og ama, ejecu a lo paso a paso,
de ene lo en un de e minado pun o, isualiza el alo de las a iables de una de e minada u ina,
pod emos cambia el alo de es as a iables pa a e como a ec a al compo amien o del p og ama,
ealiza cálculos de exp esiones, e cé e a. Y lo que es más impo an e, mien as el p og ama
depu ado se ejecu a en segundo plano.
Po lo an o la apa ición de los depu ado es, acaban con las an iguas écnicas de depu ación,
cómo pueden se aquellas en las que el p og amado mos aba po pan alla el alo de cie as
a iables in e esan es ó c í icas pa a la ejecución del p og ama.
O o mé odo muy ex endido es el uso de azas, que p e enden, no malmen e, ob ene de
o ma o denada in o mación ace ca de la ejecución del p og ama, quedando egis ada odas las
en adas a unciones, los pa áme os con las que se llama on, alo es de cie as a iables, e c ...
No malmen e se suele abaja con azas mul ini eles de o ma que el p og amado puede
selecciona en que ni el de aza se quie e si ua (Ej: Mos a únicamen e las llamadas a las
unciones y los pa áme os, ...).
in Suma(in a, in b) { /* Suma el alo de 2 a iables */
in es;
T aza_ unc_ini (“Suma”); /* Se indica que se en a en una unción*/
T aza_pa (“a”,a); /* Pa áme o a */
T aza_pa (“b”,b); /* Pa áme o b */
Res = a+b;
T aza_ e (“Res”,Res); /* Mues a el alo de la a Res */
T aza_ unc_end(“Suma”); /* Se indica que se sale de una unción*/
e u n Res;
}
Pa a el ejemplo an e io , y una ez que se ejecu a el p og ama, se pod ía gene a la siguien e
aza:
** En ando en Función: Suma
Pa áme o a = 2
Pa áme o b = 3
Valo de e o no Res = 5
** Saliendo de Función: Suma
Las écnicas an e io es adolecen de una ca ac e ís ica que hacen que el depu ado de código
sea la he amien a pe ec a pa a la de ección de e o es, es a ca ac e ís ica es la lexibilidad. Es
deci , el usua io no puede in e ac ua con el p og ama en ejecución; la de ección de e o es se
con ie e, po an o, en un p oceso es á ico y bas an e ígido en la que el usua io no pa icipa
dinámicamen e.
No obs an e hay casos en los que además del depu ado de código es necesa io hace uso de
los mé odos an e io es, aunque es os sean menos lexibles, po ejemplo pa a el uso en sis emas
empo ados ó en la depu ación de aplicaciones en las que la ejecución puede pasa po un g an
núme o de es ados (como pueden se el desa ollo de un p o ocolo de elecomunicaciones, ...), en
es os casos se suele deja ejecu ándose el p og ama du an e meses mien as se gene a la aza.
(UURUHV
Como se ha comen ado an e io men e, la unción del depu ado es la de ayuda al
p og amado a de ec a los dis in os e o es que pueden apa ece en el p og ama.
Si el compilado se enca ga de de ec a los dis in os e o es léxicos, sin ác icos y semán icos
del código uen e, hay e o es que no puede de ec a , es amos hablando de los e o es lógicos. Es
deci , los e o es p oducidos cuando el p og amado no codi ica co ec amen e el algo i mo que
esuel e un de e minado p oblema. Es os allos p o ocan salidas inespe adas e inco ec as del
p og ama, aunque ambién pueden e mina con la pé dida de in o mación ó bloqueo del o denado .
Un ejemplo de es e ipo de e o es puede se :
in i;
in j;
...
o (i=0;i<=10;j++) {
p in (“%d”,i);
}
Con el ejemplo an e io , el compilado no da ía ningún mensaje de e o , sin emba go el
p og ama nunca e mina ía, ya que es amos an e un bucle in ini o.
3RVLELOLGDGHVTXHRIUHFHHOGHSXUDGRU
A con inuación amos a e las posibilidades que le o ece el depu ado al p og amado , es
deci , ¿cómo y de qué o ma ayuda el depu ado en el p oceso de de ección de e o es?
En p ime luga , y sin duda alguna, el se icio más impo an e que o ece es la posibilidad
de aza el p og ama. El usua io pod á ejecu a paso a paso el p og ama, pudiendo p egun a en
cada momen o po el alo de las a iables, pa áme os, e c ... También es común en los
depu ado es, da la posibilidad al p og amado de deja de aza las llamadas a las unciones que
no con engan e o es, es deci , que p e iamen e haya depu ado y comp obado que son co ec as.
Veamos un ejemplo de aza:
10
11
12
13
i = 5;
j = 4;
k = Suma(i , j);
p in (“%d” , k);
Pa a el código an e io un ejemplo de aza pod ía se :
10: i = 5;
(Suma.c:10)? wa ch i
(in ) 5
(Suma.c:10)? nex
11: j = 4;
(Suma.c:11)? wa ch 4+i
(in ) 9
(Suma.c:11)? nex
12: k = Suma(i , j);
(Suma.c:12)? s ep
13: p in (“%d”, k);
(Suma.c:13)? wa ch k
(in ) 9
...
Pa a la aza an e io se puede obse a como el p og amado p egun a po el alo de la
a iable “
L
”, además decide cuando se iene que ejecu a la siguien e ins ucción (
QH[W
) o sal a se la
depu ación de una llamada a una unción (
VWHS
).
Po lo an o, el p og amado pod á con ola la aza del p og ama, ambién end á la
posibilidad de consul a el alo de las a iables, usa es os alo es en exp esiones, y asigna le
alo es. Pa a pode hace odo lo an e io el depu ado necesi a á:
• Tene in o mación de odos los elemen os que apa ecen en el p og ama. Es a in o mación
end á desc i a a endiendo a un o ma o y se án simples cadenas de ca ac e es denominadas
s abs1.
• Necesi a emos po an o de un análisis léxico, sin ác ico que nos pe mi a econoce los
dis in os s abs, así como almacena los de o ma que nos p opo cione un eco ido e icien e.
• También end emos que se capaces de e alua exp esiones, pa a ello end emos que
cons ui un e aluado de exp esiones pa a el depu ado de código.
O a posibilidad que nos o ecen los depu ado es simbólicos, es la de los pun os de up u a,
cuyo come ido es pa a al p og ama al llega a cie o luga . La u ilidad más inmedia a es la de lle a
la aza de ejecución a un de e minado luga , al luga donde se piensa que puede es a el e o .
La uncionalidad de los pun os de up u a se e conside ablemen e aumen ada con los pun os de
up u a condicionales. Lo que se p e ende con un pun o de up u a condicional es que el p og ama
se pa e en un de e minado luga siemp e y cuando se cumpla cie a condición. De es a o ma nos
se ía ácil comp oba , po ejemplo, las p econdiciones y pos condiciones de los bucles.
)XQFLRQDPLHQWRGHORVGHSXUDGRUHVDFWXDOHV
El uncionamien o de los depu ado es ac uales es a basado en uno de los modos de
ope ación que ienen los p ocesado es, el modo
WUDS
que hace que el p ocesado lance una
in e upción cada ez que se ejecu a una ins ucción.
Además de lo an e io , y al y como dijimos an e io men e, el depu ado iene que ene
conocimien o de odos los elemen os ( a iables, unciones, pa áme os...) del p og ama uen e. Es a
in o mación es especi icada nue amen e po los
VWDEV
y es gene ada po el compilado cuando se
ac i a la opción de depu ación. Las cadenas de s abs ienen de inidas po di ec i as de ensamblado
y son almacenadas en un segmen o especial (A qui ec u as x86) a la que el depu ado pod á accede
en odo momen o.
Ya solo queda ía p og ama la u ina de se icio de la in e upción que gene a el compilado
au omá icamen e, pa a pode ealiza las a eas ípicas de un depu ado de código, es deci : aza ,
consul a el alo de las a iables, cálculo de exp esiones e c...
&DUDFWHU VWLFDGHOGHSXUDGRUVLPEyOLFRGHFyGLJRTXHSUHWHQGHPRVFRQVWUXLU³SRUWDELOLGDG´
El depu ado de código es un complemen o de o a he amien a, el compilado . Un
compilado gene a a pa i de un p og ama esc i o en un lenguaje de p og amación de inido, la
aducción de és e a o o lenguaje, gene almen e de más bajo ni el que el p ime o ( espec o a
dependencia de la máquina se e ie e). No malmen e, y es lo más conocido po odos, es a
1 S ab hace e e encia a “symbol able”, e iden i ica al o ma o gene al desa ollado po Pe e Kessle en la Uni e sidad
de Be keley (Cali o nia, Es ados Unidos), pa a ep esen a la in o mación de depu ación.
aducción se ealiza al lenguaje de la máquina en la que se ejecu a á el p og ama. A es a aducción
se le conoce como código obje o o ensamblado , y depende eno memen e de la máquina pa a la que
se gene a código.
Debido a es a dependencia, el cos e de adap ación de una pla a o ma ha dwa e a o a es al o.
Es deci , el es ue zo de ob ene e siones del compilado pa a di e en es máquinas o sis emas
ope a i os llega a se excesi o; además el código obje o gene ado no cuen a con una p opiedad a la
que se es á endiendo en la ac ualidad. Nos e e imos a la po abilidad. És a es una ca ac e ís ica
que se ía deseable que poseye a odo p og ama po la cual se puede anspo a de una máquina a
o a dis in a sin ningún equisi o p e io (o po lo menos unos equisi os mínimos). Po es e mo i o,
ac ualmen e muchos compilado es gene an código ANSI C como código obje o, en ez de gene a
código máquina. El es ánda ANSI C es ac ualmen e muy es able; los compilado es lo siguen al pie
de la le a y a pa i de él se puede llega a gene a un código máquina casi an e icien e como el
que un p og amado en ensamblado pod ía gene a manualmen e. Pues o que ANSI C es un
es ánda (muy popula a ni el de la comunidad de p og amado es) que sopo an la amplia mayo ía
de compilado es de C de cualquie pla a o ma ha dwa e, el código "obje o" gene ado es po able.
Hemos ganado po an o po abilidad a cambio de ene que compila de nue o dicho código obje o
pa a ob ene un p og ama ejecu able de ini i o.
En la ac ualidad exis en mul i ud de depu ado es come ciales y académicos de g an calidad.
Aho a bien, el p incipal “p oblema” de es os depu ado es es que no pe mi e depu a
simbólicamen e p og amas pa a aquellos compilado es que gene an código C in e medio, ya que si
usamos el depu ado sob e es os p og amas lo que ealmen e es a emos depu ando se á el código C
gene ado y no el código uen e o iginal. Es o hace que muchos lenguajes como el SmallEi el e
Ing es 4GL ca ezcan de
depu ado es simbólicos, siendo la única al e na i a pa a encon a los e o es el inclui a iable en
de e minados pun os, mos a el alo de a iables y pa áme os, e c. pe o en ningún caso depu a lo
simbólicamen e.
En de ini i a, con la apa ición de compilado es que gene an código C en ez de código
máquina, la a ea de depu ación de un p og ama se puede lle a a cabo a dos ni eles de abs acción
como se puede obse a en la igu a siguien e:
•Depu a el código uen e o iginal pa a el cual enemos el compilado que gene a
código C.
•O bien depu a el código obje o en C que gene a dicho compilado con las
he amien as que exis en en un buen en o no de desa ollo C y que odos los
p og amado es suelen conoce (léase po ejemplo en o nos de Bo land o Mic oso ).
Pa a apa el hueco abie o debido a la al a de he amien as que se si úen en el p ime ni el
de abs acción, nos plan eamos el desa ollo de un depu ado de código que abaje a dicho ni el, y
que bau iza emos con el nomb e de Depu ado Simbólico de Código Po able.

Código
uen e
o iginal
COMPILADOR Código C
“obje o”
COMPILADOR
DE C
Un depu ado simbólico de
código po able se si ua a es e
ni el, depu ando el p og ama
esc i o o iginalmen e.
Los depu ado es que no malmen e
conocemos depu an simbolicamen e
el código C, sin ene en cuen a que
pueda se la adución del mismo
código esc i o en o o lenguaje
dis in o al C, como po ejemplo
Pascal.
FIGURA 1. Ni eles de abs acción en la depu ación