Update docs to match implementation of $build_and_dump_html_index
[maxima.git] / doc / info / pt_BR / Debugging.texi
bloba703c30bc77b0c33d09f7ce0b0384d6137c6ba52
1 @c Language: Brazilian Portuguese, Encoding: iso-8859-1
2 @c /Debugging.texi/1.19/Sat Jun  2 00:12:37 2007/-ko/
3 @c end concepts Debugging
4 @menu
5 * Depurando o Código Fonte::
6 * Comandos Palavra Chave::
7 * Funções e Variáveis Definidas para Depuração::   
8 @end menu
10 @node Depurando o Código Fonte, Comandos Palavra Chave, , Depurando
11 @section Depurando o Código Fonte
13 Maxima tem um depurador interno de código fonte.  
14 O usuário pode escolher um ponto de parada em uma função,
15 e então caminhar linha por linha a partir daí.  A pilha de
16 chamadas po ser examinada, juntamente com as variáveis associadas àquele
17 nível.
19 O comando @code{:help} ou @code{:h} mostra a lista de comando de depuração.
20 (Em geral,
21 comandos podem ser abreviados se a abreviação for única.  Se não for
22 única, as alternativas podem ser listadas.)
23 Dentro do depurador, o usuário pode também usar qualquer funções comuns
24 do Maxima para examinar, definir, e manipular variáveis e expressões.
26 Um ponto de parada é escolhido através do comando @code{:br} na linha de comando do Maxima.
27 Dentro do depurador,
28 o usuário pode avançar uma linha de cada vez usando o comando @code{:n} (``next'').
29 o comando @code{:bt} (``backtrace'') mostra uma lista da pilha de frames.
30 O comando @code{:r} (``resume'') sai do depurador e continua com a execução.
31 Esses comandos são demostrados no exemplo abaixo.
33 @example
34 (%i1) load ("/tmp/foobar.mac");
36 (%o1)                           /tmp/foobar.mac
38 (%i2) :br foo
39 Turning on debugging debugmode(true)
40 Bkpt 0 for foo (in /tmp/foobar.mac line 1) 
42 (%i2) bar (2,3);
43 Bkpt 0:(foobar.mac 1)
44 /tmp/foobar.mac:1::
46 (dbm:1) :bt                        <-- :bt digitado aqui lista os frames
47 #0: foo(y=5)(foobar.mac line 1)
48 #1: bar(x=2,y=3)(foobar.mac line 9)
50 (dbm:1) :n                         <-- Aqui digite :n para avançar linha
51 (foobar.mac 2)
52 /tmp/foobar.mac:2::
54 (dbm:1) :n                         <-- Aqui digite :n para avançar linha
55 (foobar.mac 3)
56 /tmp/foobar.mac:3::
58 (dbm:1) u;                         <-- Investiga o valor de u
61 (dbm:1) u: 33;                     <-- Altera u para ser 33
64 (dbm:1) :r                         <-- Digite :r para retomar a computação
66 (%o2)                                1094
67 @end example
69 O arquivo @code{/tmp/foobar.mac} é o seguinte:
71 @example
72 foo(y) := block ([u:y^2],
73   u: u+3,
74   u: u^2,
75   u);
77 bar(x,y) := (
78   x: x+2,
79   y: y+2,
80   x: foo(y),
81   x+y);
82 @end example
84 USO DO DEPURADOR ATRAVÉS DO EMACS
86 Se o usuário estiver rodando o código sob o GNU emacs em uma janela
87 shell (shell dbl), ou está rodando a versão de interface gráfica,
88 Xmaxima, então se ele para em um ponto de parada, ele verá sua
89 posição corrente no arquivo fonte a qua será mostrada na
90 outra metade da janela, ou em vermelho brilhante, ou com um pequeno
91 seta apontando na direita da linha.  Ele pode avançar uma linha por
92 vez digitando M-n (Alt-n).
94 Sob Emacs você pode executar em um shell @code{dbl}, o qual requer o
95 arquivo @code{dbl.el} no diretório elisp.
96 Tenha certeza que instalou os arquivos elisp ou adicionou o diretório elisp do Macima ao
97 seu caminho:
98 e.g., adicione o seguinte ao seu arquivo @file{.emacs} ou ao seu arquivo @file{site-init.el}
100 @example
101 (setq load-path (cons "/usr/share/maxima/5.9.1/emacs" load-path))
102 (autoload 'dbl "dbl")
103 @end example
105 então no emacs 
107 @example
108 M-x dbl
109 @end example
111 pode iniciar uma janela shell na qual você pode executar programas, por exemplo
112 Maxima, gcl, gdb etc.   Essa janela de shell também reconhece informações sobre depuração de
113 código fonte, e mostra o código fonte em outra janela.  
115 O usuário pode escolher um ponto de parada em certa linha do
116 arquivo digitando @code{C-x space}.  Isso encontra qual a função
117 que o cursor está posicionado, e então mostra qual a linha daquela função
118 que o cursor está habilitado.   Se o cursor estiver habilitado, digamos, na linha 2 de @code{foo}, então isso irá
119 inserir na outra janela o comando, ``@code{:br foo 2}'', para
120 parar @code{foo} nessa segunda linha.   Para ter isso habilitado, o usuário deve ter
121 maxima-mode.el habilitado na janela na qual o arquivo @code{foobar.mac} estiver interagindo.
122 Existe comandos adicional disponíveis naquela janela de arquivo, tais como
123 avaliando a função dentro do Maxima, através da digitação de @code{Alt-Control-x}.
125 @node Comandos Palavra Chave, Funções e Variáveis Definidas para Depuração, Depurando o Código Fonte, Depurando
126 @section Comandos Palavra Chave
128 Comandos palavra chave são palavras chaves especiais que não são interpretadas como expressões do Maxima.
129 Um comando palavra chave pode ser inserido na linha de comando do Maxima ou na linha de comando do depurador,
130 embora não possa ser inserido na linha de comando de parada.
131 Comandos palavra chave iniciam com um dois pontos, @code{:}.
132 Por exemplo, para avaliar uma forma Lisp você
133 pode digitar @code{:lisp} seguido pela forma a ser avaliada.  
135 @example
136 (%i1) :lisp (+ 2 3) 
138 @end example
140 O número de argumentos tomados depende do comando em particular.  Também,
141 você não precisa digitar o comando completo, apenas o suficiente para ser único no meio
142 das palavras chave de parada.   Dessa forma @code{:br} será suficiente para @code{:break}.
144 Os comandos de palavra chave são listados abaixo.
146 @table @code
147 @item :break F n
148 Escolhe um ponto de parada em uma função @code{F} na linha @code{n} 
149 a partir do início da função.
150 Se @code{F} for dado como uma seq@"{u}ência de caracteres, então essa seq@"{u}ência de caracteres é assumida referir-se a
151 um arquivo, e @code{n} é o deslocamente a partir do início do arquivo.
152 O deslocamento é opcional. Se for omitido, é assumido ser zero
153 (primeira linha da função ou do arquivo).
154 @item :bt
155 Imprime na tela uma lista da pilha de frames
156 @item :continue
157 Continua a computação
158 @c CAN'T SEEM TO GET :delete TO WORK !!!
159 @item :delete
160 Remove o ponto de parada selecionado, ou todos se nenum for especificado
161 @c CAN'T SEEM TO GET :disable TO WORK !!!
162 @item :disable
163 Desabilita os pontos de parada selecionados, ou todos se nenhum for especificado
164 @c CAN'T SEEM TO GET :enable TO WORK !!!
165 @item :enable
166 Habilita os pontos de de parada especificados, ou todos se nenhum for especificado
167 @item :frame n
168 Imprime na tela a pilha de frame @code{n}, ou o corrente frame se nenhum for especificado
169 @c CAN'T SEEM TO GET :help TO WORK !!!
170 @item :help
171 Imprime na tela a ajuda sobre um comando do depurador, ou todos os comandos se nenhum for especificado
172 @c CAN'T SEEM TO GET :info TO WORK !!!
173 @item :info
174 Imprime na tela informações sobre um item
175 @item :lisp alguma-forma
176 Avalia @code{alguma-forma} como uma forma Lisp
177 @item :lisp-quiet alguma-forma
178 Avalia a forma Lisp @code{alguma-forma} sem qualquer saída
179 @item :next
180 Como @code{:step}, exceto @code{:next} passos sobre chamadas de fução
181 @item :quit
182 Sai do nível corrente do depurador sem concluir a computação
183 @item :resume
184 Continua a computação
185 @item :step
186 Continua a computação até encontraruma nova linha de códico
187 @item :top
188 Retorne para a linha de comando do Maxima (saindo de qualquer nível do depurador) sem 
189 completar a computação
190 @end table 
193 @node Funções e Variáveis Definidas para Depuração, , Comandos Palavra Chave, Depurando
194 @section Funções e Variáveis Definidas para Depuração
196 @defvr {Variável de opção} refcheck
197 Valor padrão: @code{false}
199 Quando @code{refcheck} for @code{true}, Maxima imprime uma mensagem
200 cada vez que uma variável associada for usada pela primeira vez em uma
201 computação.
203 @end defvr
205 @defvr {Variável de opção} setcheck
206 Valor padrão: @code{false}
208 Se @code{setcheck} for escolhido para uma lista de variáveis (as quais podem
209 ser subscritas), 
210 Maxima mostra uma mensagem quando as variáveis, ou
211 ocorrências subscritas delas, forem associadas com o
212 operador comum de atribuição @code{:}, o operador @code{::}
213 de atribuição, ou associando argumentos de função,
214 mas não com o operador de atribuição de função @code{:=} nem o operador de atribuição
215 @code{::=} de macro.
216 A mensagem compreende o nome das variáveis e o
217 valor associado a ela.
219 @code{setcheck} pode ser escolhida para @code{all} ou @code{true} incluindo
220 desse modo todas as variáveis.
222 Cada nova atribuição de @code{setcheck} estabelece uma nova lista de variáveis
223 para verificar, e quaisquer variáveis previamente atribuídas a @code{setcheck} são esquecidas.
225 Os nomes atribuídos a @code{setcheck} devem ter um apóstrofo no início se eles forem de outra forma
226 avaliam para alguma outra coisa que não eles mesmo.
227 Por exemplo, se @code{x}, @code{y}, e @code{z} estiverem atualmente associados, então digite
229 @example
230 setcheck: ['x, 'y, 'z]$
231 @end example
233 para colocá-los na lista de variáveis monitoradas.
235 Nenhuma saída é gerada quando uma
236 variável na lista @code{setcheck} for atribuída a sí mesma, e.g., @code{X: 'X}.
238 @end defvr
240 @defvr {Variável de opção} setcheckbreak
241 Valor padrão: @code{false}
243 Quando @code{setcheckbreak} for @code{true},
244 Maxima mostrará um ponto de parada 
245 quando uma variável sob a lista @code{setcheck} for atribuída a um novo valor.
246 A parada ocorre antes que a atribuíção seja concluída.
247 Nesse ponto, @code{setval} retém o valor para o qual a variável está 
248 para ser atribuída.
249 Conseq@"{u}entemente, se pode atribuir um valor diferente através da atribuição a @code{setval}.
251 Veja também @code{setcheck} e @code{setval}.
253 @end defvr
255 @defvr {Variável de sistema} setval
256 Mantém o valor para o qual a variável está para ser escolhida quando
257 um @code{setcheckbreak} ocorrer.
258 Conseq@"{u}entemente, se pode atribuir um valor diferente através da atribuição a @code{setval}.
260 Veja também @code{setcheck} e @code{setcheckbreak}.
262 @end defvr
264 @deffn {Função} timer (@var{f_1}, ..., @var{f_n})
265 @deffnx {Função} timer (all)
266 @deffnx {Função} timer ()
267 Dadas as funções @var{f_1}, ..., @var{f_n},
268 @code{timer} coloca cada uma na lista de funções para as quais cronometragens estatísticas são coletadas.
269 @code{timer(f)$ timer(g)$} coloca @code{f} e então @code{g} sobre a lista;
270 a lista acumula de uma chamada para a chamada seguinte.
272 @code{timer(all)} coloca todas as funções definidas pelo usuário (a saber pela variável global @code{functions})
273 na lista de funções monitoradas pela função @code{time}.
275 Sem argumentos, 
276 @code{timer} retorna a lista das funções tempo estatisticamente monitoradas.
278 Maxima armazena quanto tempo é empregado executando cada função
279 na lista de funções tempo estatisticamente monitoradas.
280 @code{timer_info} retorna a coronometragem estatística, incluindo o
281 tempo médio decorrido por chamada de função, o número de chamadas, e o
282 tempo total decorrido.
283 @code{untimer} remove funções da lista de funções tempo estatisticamente monitoradas.
285 @code{timer} não avalia seus argumentos. 
286 @code{f(x) := x^2$ g:f$ timer(g)$} não coloca @code{f} na lista de funções estatisticamente monitoradas.
288 Se @code{trace(f)} está vigorando, então @code{timer(f)} não tem efeito; @code{trace} e
289 @code{timer} não podem ambas atuarem ao mesmo tempo.
291 Veja também @code{timer_devalue}.
293 @end deffn
294 @deffn {Função} untimer (@var{f_1}, ..., @var{f_n})
295 @deffnx {Função} untimer ()
296 Dadas as funções @var{f_1}, ..., @var{f_n},
297 @code{untimer} remove cada uma das funções listadas da lista de funções estatisticamente monitoradas.
299 Sem argumentos, @code{untimer} remove todas as funções atualmente na  lista de funções estatisticamente monitoradas.
301 Após @code{untimer (f)} ser executada, @code{timer_info (f)} ainda retorna
302 estatisticas de tempo previamente coletadas,
303 embora @code{timer_info()} (sem argumentos) não
304 retorna informações sobre qualquer função que não estiver atualmente na lista de funções tempo estatisticamente monitoradas.
305 @code{timer (f)} reposiciona todas as estatisticas de tempo para zero
306 e coloca @code{f} na lista de funções estatisticamente monitoradas novamente.
308 @end deffn
310 @defvr {Variável de opção} timer_devalue
311 Valor Padrão: @code{false}
313 Quando @code{timer_devalue} for @code{true}, Maxima subtrai de cada função estatisticamente monitorada
314 o tempo empregado em ou funções estatisticamente monitoradas. De outra forma, o tempo reportado 
315 para cada função inclui o tempo empregado em outras funções.
316 Note que tempo empregado em funções não estatisticamente monitoradas não é subtraído do
317 tempo total.
319 Veja também @code{timer} e @code{timer_info}.
321 @end defvr
323 @deffn {Função} timer_info (@var{f_1}, ..., @var{f_n})
324 @deffnx {Função} timer_info ()
325 Dadas as funções @var{f_1}, ..., @var{f_n},
326 @code{timer_info} retorna uma matriz contendo informações de cronometragem para cada função.
327 Sem argumentos, @code{timer_info} retorna informações de cronometragem para
328 todas as funções atualmente na lista de funções estatisticamente monitoradas.
330 A matriz retornada através de @code{timer_info} contém o nome da função,
331 tempo por chamda de função, número de chamadas a funções,tempo total,
332 e @code{gctime}, cujja forma "tempo de descarte" no Macsyma original
333 mas agora é sempre zero.
335 Os dados sobre os quais @code{timer_info} constrói seu valor de retorno
336 podem também serem obtidos através da função @code{get}:
338 @example
339 get(f, 'calls);  get(f, 'runtime);  get(f, 'gctime);
340 @end example
342 Veja também @code{timer}.
344 @end deffn
346 @deffn {Função} trace (@var{f_1}, ..., @var{f_n})
347 @deffnx {Função} trace (all)
348 @deffnx {Função} trace ()
349 Dadas as funções @var{f_1}, ..., @var{f_n},
350 @code{trace} instrui Maxima para mostrar
351 informações de depuração quando essas funções forem chamadas.
352 @code{trace(f)$ trace(g)$} coloca @code{f} e então @code{g} na lista de funções
353 para serem colocadas sob a ação de @code{trace}; a lista acumula de uma chamada para a seguinte.
355 @code{trace(all)} coloca todas as funções definidas pelo usuário (a saber pela variável global @code{functions})
356 na lista de funções a serem monitoradas pela função @code{trace}.
358 Sem argumentos,
359 @code{trace} retorna uma lista de todas as funções atualmente sob a ação de @code{trace}.
361 A função @code{untrace} desabilita a ação de @code{trace}.
362 Veja também @code{trace_options}. 
364 @code{trace} não avalia seus argumentos. Dessa forma,
365 @code{f(x) := x^2$ g:f$ trace(g)$} não coloca @code{f} sobre a lista de funções monitoradas pela função @code{trace}.
367 Quando uma função for redefinida, ela é removida da lista de @code{timer}.
368 Dessa forma após @code{timer(f)$ f(x) := x^2$},
369 a função @code{f} não mais está na lista de @code{timer}.
371 Se @code{timer (f)} estiver em efeito, então @code{trace (f)} não está agindo; @code{trace} e
372 @code{timer} não podem ambas estar agindo para a mesma função.
374 @end deffn
376 @deffn {Função} trace_options (@var{f}, @var{option_1}, ..., @var{option_n})
377 @deffnx {Função} trace_options (@var{f})
378 Escolhe as opções de @code{trace} para a função @var{f}.
379 Quaisquer opções anteriores são substituídas.
380 @code{trace_options (@var{f}, ...)} não tem efeito a menos que
381 @code{trace (@var{f})} tenha sido também chamada (ou antes ou após @code{trace_options}). 
383 @code{trace_options (@var{f})} reposiciona todas as opções para seus valores padrão.
385 As opções de palavra chave são:
387 @itemize @bullet
388 @item
389 @code{noprint}
390 Não mostre uma mensagem na entrada da função e saia.
391 @item
392 @code{break}
393 Coloque um ponto de parada antes da função ser inserida,
394 e após a funçãos er retirada. Veja @code{break}.
395 @item
396 @code{lisp_print}
397 Mostre argumentos e valores de retorno com objetos Lisp.
398 @item
399 @code{info}
400 Mostre @code{-> true} na entrada da funçào e saia.
401 @item
402 @code{errorcatch}
403 Capture os erros, fornecendo a opção para sinalizar um erro,
404 tentar novamente a chamada de função, ou especificar um valor de retorno.
405 @end itemize
407 Opções para @code{trace} são especificadas em duas formas. A presença da palavra chave de 
408 opção sozinha coloca a opção para ter efeito incondicionalmente.
409 (Note que opção @var{foo} não coloca para ter efeito especificando 
410 @code{@var{foo}: true} ou uma forma similar; note também que palavras chave não precisam
411 estar com apóstrofo.) Especificando a opção palavra chave com uma função
412 predicado torna a opção condicional sobre o predicado.
414 A lista de argumentos para a função predicado é sempre 
415 @code{[level, direction, function, item]} onde @code{level} é o nível rerecursão
416 para a função,  @code{direction} é ou @code{enter} ou @code{exit}, @code{function} é o
417 nome da função, e @code{item} é a lista de argumentos (sobre entrada)
418 ou o valor de retorno (sobre a saída).
420 Aqui está um exemplo de opções incondicionais de @code{trace}:
422 @example
423 (%i1) ff(n) := if equal(n, 0) then 1 else n * ff(n - 1)$
425 (%i2) trace (ff)$
427 (%i3) trace_options (ff, lisp_print, break)$
429 (%i4) ff(3);
430 @end example
432 Aqui está a mesma função, com a opção @code{break} condicional
433 sobre um predicado:
435 @example
436 (%i5) trace_options (ff, break(pp))$
438 (%i6) pp (level, direction, function, item) := block (print (item),
439     return (function = 'ff and level = 3 and direction = exit))$
441 (%i7) ff(6);
442 @end example
444 @end deffn
446 @deffn {Função} untrace (@var{f_1}, ..., @var{f_n})
447 @deffnx {Função} untrace ()
448 Dadas as funções @var{f_1}, ..., @var{f_n},
449 @code{untrace} desabilita a a monitoração habilitada pela função @code{trace}.
450 Sem argumentos, @code{untrace} desabilita a atuação da função @code{trade} para todas as funções.
452 @code{untrace} retorne uma lista das funções para as quais 
453 @code{untrace} desabilita a atuação de @code{trace}.
455 @end deffn