~ubuntu-branches/debian/squeeze/maxima/squeeze

« back to all changes in this revision

Viewing changes to doc/info/es/Debugging.es.texi

  • Committer: Bazaar Package Importer
  • Author(s): Camm Maguire
  • Date: 2006-10-18 14:52:42 UTC
  • mto: (1.1.5 upstream)
  • mto: This revision was merged to the branch mainline in revision 4.
  • Revision ID: james.westby@ubuntu.com-20061018145242-vzyrm5hmxr8kiosf
ImportĀ upstreamĀ versionĀ 5.10.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
@c version 1.16
 
2
@menu
 
3
* Depuraci@'on del c@'odigo fuente::
 
4
* Claves de depuraci@'on::
 
5
* Definiciones para Depurado::
 
6
@end menu
 
7
 
 
8
@node Depuraci@'on del c@'odigo fuente, Claves de depuraci@'on, , Depurado
 
9
@section Depuraci@'on del c@'odigo fuente
 
10
 
 
11
Maxima es capaz de dar asistencia en la depuraci@'on del c@'odigo fuente. Un usuario puede establecer un punto de referencia dentro del c@'odigo de una funci@'on a partir del cual se siga la ejecuci@'on l@'{@dotless{i}}nea a l@'{@dotless{i}}nea. La compliaci@'on puede ser posteriormente examinada, conjuntamente con los valores que se han ido asignando a las variables.
 
12
 
 
13
La instrucci@'on @code{:help}, o @code{:h}, muestra la lista de comandos para la depuraci@'on. (En general, los comandos pueden abreviarse; en algunos casos la lista de alternativas podr@'a ser listada.) Dentro del depurador, el usuario podr@'a examinar tambi@'en cualquier funci@'on propia de Maxima, definirla y manipular variables y expresiones.
 
14
 
 
15
El punto de referencia se establecer@'a con la instrucci@'on @code{:br}. Ya dentro del depurador, el usuario podr@'a avanzar una l@'{@dotless{i}}nea de cada vez utilizando la instrucci@'on @code{:n} (de ``next'', en ingl@'es). La orden @code{:bt} (de ``backtrace'') muestra la lista de la pila. Finalmente, con el comando @code{:r} (``resume'') se abandona el depurador continuando con la ejecuci@'on. El uso de estas instrucciones se muestra en el siguiente ejemplo.
 
16
 
 
17
@example
 
18
(%i1) load ("/tmp/foobar.mac");
 
19
 
 
20
(%o1)                           /tmp/foobar.mac
 
21
 
 
22
(%i2) :br foo
 
23
Turning on debugging debugmode(true)
 
24
Bkpt 0 for foo (in /tmp/foobar.mac line 1) 
 
25
 
 
26
(%i2) bar (2,3);
 
27
Bkpt 0:(foobar.mac 1)
 
28
/tmp/foobar.mac:1::
 
29
 
 
30
(dbm:1) :bt                  <-- pulsando :bt se retrocede
 
31
#0: foo(y=5)(foobar.mac line 1)
 
32
#1: bar(x=2,y=3)(foobar.mac line 9)
 
33
 
 
34
(dbm:1) :n                   <-- pulsando :n se avanza una l@'{@dotless{i}}nea
 
35
(foobar.mac 2)
 
36
/tmp/foobar.mac:2::
 
37
 
 
38
(dbm:1) :n                   <-- pulsando :n se avanza otra l@'{@dotless{i}}nea
 
39
(foobar.mac 3)
 
40
/tmp/foobar.mac:3::
 
41
 
 
42
(dbm:1) u;                   <-- se pide el valor de u
 
43
28
 
44
 
 
45
(dbm:1) u: 33;               <-- se cambia el valor de u a 33
 
46
33
 
47
 
 
48
(dbm:1) :r                   <-- pulsando :r se termina la depuraci@'on
 
49
 
 
50
(%o2)                                1094
 
51
@end example
 
52
 
 
53
El fichero @code{/tmp/foobar.mac} contiene lo siguiente:
 
54
 
 
55
@example
 
56
foo(y) := block ([u:y^2],
 
57
  u: u+3,
 
58
  u: u^2,
 
59
  u);
 
60
 
 
61
bar(x,y) := (
 
62
  x: x+2,
 
63
  y: y+2,
 
64
  x: foo(y),
 
65
  x+y);
 
66
@end example
 
67
 
 
68
USO DEL DEPURADOR EN EMACS
 
69
 
 
70
Si el usuario est@'a corriendo el c@'odigo bajo GNU emacs en un entorno de texto (dbl shell), o est@'a ejecutando el  entorno gr@'afico @code{xmaxima}, entonces cuando una funci@'on pare en el punto de referencia, podr@'a observar su
 
71
posici@'on actual en el archivo fuente, el cual ser@'a mostrado en la otra mitad de la ventana, bien resaltada en rojo, o con una peque@~na flecha apuntando a la l@'{@dotless{i}}nea correcta. El usuario puede avanzar l@'{@dotless{i}}neas simples 
 
72
tecleando M-n (Alt-n).
 
73
 
 
74
Bajo Emacs se debe ejecutar el programa en una ventana de texto @code{dbl}, la cual requiere el archivo @code{dbl.el} que est@'a en el directorio elisp. El usuario debe instalar los archivos elisp o agregar el directorio elisp de Maxima a la ruta de b@'usqueda: por ejemplo, se puede a@~nadir lo siguiente al archivo @file{.emacs} o al @code{site-init.el}
 
75
 
 
76
@example
 
77
(setq load-path (cons "/usr/share/maxima/5.9.1/emacs" load-path))
 
78
(autoload 'dbl "dbl")
 
79
@end example
 
80
 
 
81
entonces en emacs
 
82
 
 
83
@example
 
84
M-x dbl
 
85
@end example
 
86
 
 
87
deber@'{@dotless{i}}a abrir una ventana del sistema en la cual se pueden ejecutar programas, por ejemplo
 
88
Maxima, gcl, gdb, etc.  En esta ventana tambi@'en se puede ejecutar el depurador, mostrando el c@'odigo fuente en la otra ventana.
 
89
 
 
90
El usuario puede colocar un punto de referencia en una l@'{@dotless{i}}nea determinada sin m@'as que teclear @code{C-x space}. Con esto se le hace saber al depurador en qu@'e funci@'on est@'a el cursor y en qu@'e l@'{@dotless{i}}nea del mismo. Si el cursor est@'a en la l@'{@dotless{i}}nea 2 de @code{foo}, entonces insertar@'a en la otra ventana la instrucci@'on ``@code{:br foo 2}'', a fin de detener @code{foo} justo en la segunda l@'{@dotless{i}}nea. Para tener esto operativo, el usuario debe tener activo maxima-mode.el (modo-maxima.el) en la ventana en la que est@'a @code{foobar.mac}. Hay otros comandos disponibles en la ventana, como evaluar la funci@'on dentro de Maxima tecleando @code{Alt-Control-x}.
 
91
 
 
92
 
 
93
@node Claves de depuraci@'on, Definiciones para Depurado, Depuraci@'on del c@'odigo fuente, Depurado
 
94
@section Claves de depuraci@'on
 
95
 
 
96
Las claves de depuraci@'on son palabras que no son interpretadas como expresiones de Maxima. Una clave de depuraci@'on puede introducirse dentro de Maxima o del depurador. Las claves de depuraci@'on comienzan con dos puntos, ':'. Por ejemplo, para evaluar una expresi@'on Lisp, se puede teclear @code{:lisp} seguido de la expresi@'on a ser evaluada.
 
97
 
 
98
@example
 
99
(%i1) :lisp (+ 2 3) 
 
100
5
 
101
@end example
 
102
 
 
103
El n@'umero de argumentos depende del comando en particular. Adem@'as, tampoco es necesario teclear el nombre completo de la instrucci@'on, tan solo lo justo para diferenciarla de las otras instrucciones. As@'{@dotless{i}}, @code{:br} ser@'{@dotless{i}}a suficiente para @code{:break}.
 
104
 
 
105
Las claves de depuraci@'on se listan a continuaci@'on.
 
106
 
 
107
@table @code
 
108
@item :break F n
 
109
Establece un punto de referencia en la funci@'on @code{F} en la l@'{@dotless{i}}nea @code{n} contando a partir del comienzo de la funci@'on. Si @code{F} es una cadena, entonces se entiende que se trata de un fichero, siendo entonces @code{n} el n@'umero de l@'{@dotless{i}}nea a partir del comienzo del fichero. El valor @code{n} es opcional; en caso de no ser suministrado, se entender@'a que vale cero (primera l@'{@dotless{i}}nea de la funci@'on o fichero).
 
110
@item :bt
 
111
Retrocede en la pila.
 
112
@item :continue
 
113
Continua el c@'omputo de la funci@'on.
 
114
@item :delete
 
115
Borra los punto de referencia especificados, o todos si no se especifica ninguno.
 
116
@item :disable
 
117
Deshabilita los puntos de referencia especificados, o todos si no se especifica ninguno.
 
118
@item :enable
 
119
Habilita los puntos de referencia especificados, o todos si no se especifica ninguno.
 
120
@item :frame n
 
121
Imprime el elemento @code{n} de la pila, o el actualmente activo si no se especifica ninguno.
 
122
@item :help
 
123
Imprime la ayuda sobre un comando del depurador, o de todos los comandos si no se especifica ninguno.
 
124
@item :info
 
125
Imprime informaci@'on sobre un elemento.
 
126
@item :lisp expresi@'on
 
127
Eval@'ua la @code{expresi@'on} Lisp.
 
128
@item :lisp-quiet expresi@'on
 
129
Eval@'ua la @code{expresi@'on} Lisp sin devolver el resultado.
 
130
@item :next
 
131
Como @code{:step}, excepto que @code{:next} se salta las llamadas a funciones.
 
132
@item :quit
 
133
Sale del nivel actual del depurador sin completar el c@'omputo.
 
134
@item :resume
 
135
Contin@'ua con el c@'omputo.
 
136
@item :step
 
137
Sigue con el c@'omputo de la funci@'on o fichero hasta que alcance una nueva l@'{@dotless{i}}nea fuente.
 
138
@item :top
 
139
Retorna a Maxima desde cualquier nivel del depurador sin completar el c@'omputo.
 
140
@end table 
 
141
 
 
142
 
 
143
@node Definiciones para Depurado, , Claves de depuraci@'on, Depurado
 
144
@section Definiciones para Depurado
 
145
 
 
146
@defvr {Variable opcional} refcheck
 
147
Valor por defecto: @code{false}
 
148
 
 
149
Cuando @code{refcheck} vale @code{true}, Maxima imprime un mensaje cada vez que una variable es utilizada por vez primera en un c@'alculo.
 
150
 
 
151
@end defvr
 
152
 
 
153
@defvr {Variable opcional} setcheck
 
154
Valor por defecto: @code{false}
 
155
 
 
156
Cuando el valor de @code{setcheck} es una lista de variables (se admite que tengan sub@'{@dotless{i}}ndices) Maxima devuelve un mensaje indicando si los valores que han sido asignados a las variables lo han sido con el operador ordinario @code{:}, o con el operador de asignaci@'on @code{::} o como resultado de haberse realizado una llamada de funci@'on, pero en ning@'un caso cuando la asignaci@'on haya sido hecha mediante los operadores @code{:=} o @code{::=}. El mensaje contiene el nombre de la variable y su valor.
 
157
 
 
158
La variable @code{setcheck} admite tambi@'en los valores @code{all} o @code{true} con lo que el informe incluir@'a todas las variables.
 
159
 
 
160
Cada nueva asignaci@'on de @code{setcheck} establece una nueva lista de variables a ser monitorizada, de forma que cualquier otra variable previamente asignada a @code{setcheck} es olvidada.
 
161
 
 
162
Los nombres asignados a @code{setcheck} deben estar precedidos del ap@'ostrofo @code{'} a fin de evitar que las variables sean evaluadas antes de ser almacenadas en @code{setcheck}. Por ejemplo, si @code{x}, @code{y} y @code{z} ya guardan alg@'un valor entoces se har@'a
 
163
 
 
164
@example
 
165
setcheck: ['x, 'y, 'z]$
 
166
@end example
 
167
 
 
168
para colocarlas en la lista de variables a monitorizar.
 
169
 
 
170
No se generar@'a ninguna salida cuando una variable de la lista @code{setcheck} sea asignada a ella misma, como en @code{X: 'X}.
 
171
 
 
172
@end defvr
 
173
 
 
174
@defvr {Variable opcional} setcheckbreak
 
175
Valor por defecto: @code{false}
 
176
 
 
177
Si @code{setcheckbreak} es igual @code{true}, Maxima se detendr@'a siempre que a una variable de la lista @code{setcheck} se le asigne un nuevo valor. La detenci@'on tendr@'a lugar justo antes de hacerse la asignaci@'on. En ese momento @code{setval} guarda el valor que se le va a dar a la variable. Entonces el usuario podr@'a darle un valor diferente pas@'andoselo a la variable @code{setval}.
 
178
 
 
179
V@'eanse tambi@'en @code{setcheck} y @code{setval}.
 
180
 
 
181
@end defvr
 
182
 
 
183
@defvr {Variable del sistema} setval
 
184
 
 
185
Guarda el valor que va a ser asignado a una variable cuando @code{setcheckbreak} realiza una detenci@'on. Entonces se podr@'a asignarle otro valor pas@'andoselo previamente a @code{setval}.
 
186
 
 
187
V@'eanse tambi@'en @code{setcheck} y @code{setcheckbreak}.
 
188
 
 
189
@end defvr
 
190
 
 
191
@deffn {Funci@'on} timer (@var{f_1}, ..., @var{f_n})
 
192
@deffnx {Funci@'on} timer ()
 
193
Dadas las funciones @var{f_1}, ..., @var{f_n}, @code{timer} coloca cada una de ellas en la lista de funciones para las cuales se generar@'an estad@'{@dotless{i}}sticas relativas al tiempo de c@'omputo. As@'{@dotless{i}}, @code{timer(f)$ timer(g)$} coloca a @code{f} y luego a @code{g} en dicha lista de forma acumulativa.
 
194
 
 
195
Si no se le pasan argumentos a @code{timer} se obtendr@'a la lista de funciones cuyos tiempos de ejecuci@'on se quieren monitorizar.
 
196
 
 
197
Maxima almacena la duraci@'on del c@'omputo de cada funci@'on de la lista, de forma que @code{timer_info} devolver@'a las estad@'{@dotless{i}}sticas correspondientes, incluyendo el tiempo medio de cada llamada a la funci@'on, el n@'umero de llamadas realizadas y el tiempo total transcurrido. La instrucci@'on @code{untimer} borra las funciones de la lista.
 
198
 
 
199
La funci@'on @code{timer} no eval@'ua sus argumentos, de forma que @code{f(x) := x^2$ g:f$ timer(g)$} no coloca a @code{f} en la lista.
 
200
 
 
201
Si @code{trace(f)} est@'a activada, entonces @code{timer(f)} est@'a desactivada; @code{trace} y @code{timer} no pueden estar operativas al mismo tiempo.
 
202
 
 
203
V@'ease tambi@'en @code{timer_devalue}.
 
204
 
 
205
@end deffn
 
206
 
 
207
@deffn {Funci@'on} untimer (@var{f_1}, ..., @var{f_n})
 
208
@deffnx {Funci@'on} untimer ()
 
209
Dadas las funciones @var{f_1}, ..., @var{f_n}, @code{untimer} las elimina de la lista de funciones cuyos tiempos de ejecuci@'on se quiere monitorizar.
 
210
 
 
211
Si no se le suministran argumentos, @code{untimer} borra completamente la lista.
 
212
 
 
213
Tras la ejecuci@'on de @code{untimer (f)}, @code{timer_info (f)} a@'un devuelve las estad@'{@dotless{i}}sticas de tiempo previamente registradas, pero @code{timer_info()} (sin argumentos) no devuelve informaci@'on sobre aquellas funciones que ya no est@'an en la lista. La ejecuci@'on de @code{timer (f)} inicializa todas las estad@'{@dotless{i}}sticas a cero y coloca @code{f} nuevamente en la lista.
 
214
 
 
215
@end deffn
 
216
 
 
217
@defvr {Variable opcional} timer_devalue
 
218
Valor por defecto: @code{false}
 
219
 
 
220
Si @code{timer_devalue} es igual a @code{true}, Maxima le resta a cada funci@'on cuyos tiempos de ejecuci@'on se quiere monitorizar el tiempo gastado en llamadas a otras funciones presentes tambi@'en en la lista de monitorizaci@'on. En caso contrario, los tiempos que se obtienen para cada funci@'on incluyen tambi@'en los consumidos en otras funciones. N@'otese que el tiempo consumido en llamadas a otras funciones que no est@'an en la lista de monitorizaci@'on no se resta del tiempo total.
 
221
 
 
222
V@'eanse tambi@'en @code{timer} y @code{timer_info}.
 
223
 
 
224
@end defvr
 
225
 
 
226
@deffn {Funci@'on} timer_info (@var{f_1}, ..., @var{f_n})
 
227
@deffnx {Funci@'on} timer_info ()
 
228
Dadas las funciones @var{f_1}, ..., @var{f_n}, @code{timer_info} devuelve una matriz con informaci@'on relativa a los tiempos de ejecuci@'on de cada una de estas funciones. Sin argumentos, @code{timer_info} devuelve la informaci@'on asociada a todas las funciones cuyos tiempos de ejecuci@'on se quiere monitorizar.
 
229
 
 
230
La matriz devuelta por @code{timer_info} incluye los nombres de las funciones, tiempo de ejecuci@'on en cada llamada, n@'umero de veces que ha sido llamada, tiempo total de ejecuci@'on y tiempo consumido en la recolecci@'on de basura, @code{gctime} (del ingl@'es, "garbage collection time") en la versi@'on original de Macsyma, aunque ahora toma el valor constante cero.
 
231
 
 
232
Los datos con los que @code{timer_info} construye su respuesta pueden obtenerse tambi@'en con la funci@'on @code{get}:
 
233
 
 
234
@example
 
235
get(f, 'calls);  get(f, 'runtime);  get(f, 'gctime);
 
236
@end example
 
237
 
 
238
V@'ease tambi@'en @code{timer}.
 
239
 
 
240
@end deffn
 
241
 
 
242
 
 
243
@deffn {Funci@'on} trace (@var{f_1}, ..., @var{f_n})
 
244
@deffnx {Funci@'on} trace ()
 
245
 
 
246
Dadas las funciones @var{f_1}, ..., @var{f_n}, @code{trace} imprime informaci@'on sobre depuraci@'on cada vez que estas funciones son llamadas; @code{trace(f)$ trace(g)$} coloca de forma acumulativa a @code{f} y luego a @code{g} en la lista de funciones a ser rastradas.
 
247
 
 
248
Si no se suministran argumentos, @code{trace} devuelve una lista con todas las funciones a ser rastreadas.
 
249
 
 
250
La funci@'on @code{untrace} desactiva el rastreo. V@'ease tambi@'en @code{trace_options}.
 
251
 
 
252
La funci@'on @code{trace} no eval@'ua sus argumentos, de forma que @code{f(x) := x^2$ g:f$ trace(g)$} no coloca a @code{f} en la lista de rastreo.
 
253
 
 
254
Cuando una funci@'on se redefine es eliminada de la lista de rastreo. As@'{@dotless{i}}, tras  @code{timer(f)$ f(x) := x^2$}, la funci@'on @code{f} dejar@'a de estar en dicha lista.
 
255
 
 
256
Si @code{timer (f)} est@'a activado, entonces @code{trace (f)} est@'a desactivado, ya que @code{trace} y @code{timer} no pueden estar ambos activos para la misma funci@'on.
 
257
 
 
258
@end deffn
 
259
 
 
260
@deffn {Funci@'on} trace_options (@var{f}, @var{option_1}, ..., @var{option_n})
 
261
@deffnx {Funci@'on} trace_options (@var{f})
 
262
 
 
263
Establece las opciones de rastreo para la funci@'on @var{f}. Cualquier otra opci@'on previamente especificada queda reemplazada por las nuevas. La ejecuci@'on de @code{trace_options (@var{f}, ...)} no tiene ning@'un efecto, a menos que se haya invocado previamente a @code{trace (@var{f})} (es indiferente que esta invocaci@'on sea anterior o posterior a @code{trace_options}). 
 
264
 
 
265
@code{trace_options (@var{f})} inicializa todas las opciones a sus valores por defecto.
 
266
 
 
267
Las claves de opciones son:
 
268
 
 
269
@itemize @bullet
 
270
@item
 
271
@code{noprint}:
 
272
No se imprime mensaje alguno ni a la entrada ni a la salida de la funci@'on.
 
273
@item
 
274
@code{break}:
 
275
Coloca un punto de referencia antes de que la funci@'on comience a ejecutarse y otro despu@'es de que termine su ejecuci@'on. V@'ease @code{break}.
 
276
@item
 
277
@code{lisp_print}:
 
278
Muestra los argumentos y valores retornados como objetos de Lisp.
 
279
@item
 
280
@code{info}:
 
281
Imprime @code{-> true} tanto a la entrada como a la salida de la funci@'on.
 
282
@item
 
283
@code{errorcatch}:
 
284
Detecta errores, otorgando la posibilidad de marcar un error, reintentar la llamada a la funci@'on o especificar un valor de retorno.
 
285
@end itemize
 
286
 
 
287
Las opciones de rastreo se especifican de dos formas. La @'unica presencia de la clave de opci@'on ya activa la opci@'on. (N@'otese que la opci@'on @var{foo} no se activa mediante @code{@var{foo}: true} u otra forma similar; se tendr@'a en cuenta tambi@'en que las claves no necesitan ir precedidas del ap@'ostrofo.) Especificando la clave de opci@'on junto con una funci@'on de predicado se hace que la opci@'on quede condicionada al predicado.
 
288
 
 
289
La lista de argumentos para las funciones de predicado es siempre @code{[level, direction, function, item]} donde @code{level} es el nivel de recursi@'on para la funci@'on,  @code{direction} puede ser tanto @code{enter} como @code{exit}, @code{function} es el nombre de la funci@'on  y @code{item} es la lista de argumentos (a la entrada) o el valor de retorno (a la salida).
 
290
 
 
291
A continuaci@'on un ejemplo de opciones de rastreo no condicionales:
 
292
 
 
293
@example
 
294
(%i1) ff(n) := if equal(n, 0) then 1 else n * ff(n - 1)$
 
295
 
 
296
(%i2) trace (ff)$
 
297
 
 
298
(%i3) trace_options (ff, lisp_print, break)$
 
299
 
 
300
(%i4) ff(3);
 
301
@end example
 
302
 
 
303
Para la misma funci@'on, con la opci@'on @code{break} condicionada a un predicado:
 
304
 
 
305
@example
 
306
(%i5) trace_options (ff, break(pp))$
 
307
 
 
308
(%i6) pp (level, direction, function, item) := block (print (item),
 
309
    return (function = 'ff and level = 3 and direction = exit))$
 
310
 
 
311
(%i7) ff(6);
 
312
@end example
 
313
 
 
314
@end deffn
 
315
 
 
316
@deffn {Funci@'on} untrace (@var{f_1}, ..., @var{f_n})
 
317
@deffnx {Funci@'on} untrace ()
 
318
Dadas las funciones @var{f_1}, ..., @var{f_n},
 
319
@code{untrace} desactiva el rastreo previamente activado por la funci@'on @code{trace}. Si no se aportan argumentos, @code{untrace} desactiva el rastreo de todas las funciones.
 
320
 
 
321
La llamada a @code{untrace} devuelve una lista con las funciones para las que el rastreo se ha desactivado.
 
322
 
 
323
@end deffn