1 @c Language: Portuguese
2 @c Source: Debugging.texi (en) 1.16
4 * Depuração do Código Fonte::
5 * Comandos Palavra Chave::
6 * Definições para Depuração::
9 @node Depuração do Código Fonte, Comandos Palavra Chave, , Depuração
10 @section Depuração do Código Fonte
12 Maxima tem um depurador interno de código fonte. O utilizador pode
13 escolher um ponto de parada numa função, e executar o programa
14 linha por linha a partir daí. A pilha de chamadas pode ser
15 examinada, juntamente com as variáveis existentes nesse nível.
17 O comando @code{:help} ou @code{:h} mostra a lista de comandos de
18 depuração. (Em geral, os comandos podem ser abreviados se a
19 abreviação for única. Se não for única, as alternativas
20 podem ser listadas.) Dentro do depurador, o utilizador pode também
21 usar quaisquer funções comuns do Maxima para examinar, definir,
22 e manipular variáveis e expressões.
24 Um ponto de parada é escolhido através do comando @code{:br} na
25 linha de comando do Maxima. Dentro do depurador, o utilizador pode
26 avançar uma linha de cada vez usando o comando @code{:n}
27 (``next''). o comando @code{:bt} (``backtrace'') mostra uma lista da
28 pilha de frames. O comando @code{:r} (``resume'') sai do depurador e
29 continua com a execução. Esses comandos são demostrados no
33 (%i1) load ("/tmp/foobar.mac");
38 Turning on debugging debugmode(true)
39 Bkpt 0 for foo (in /tmp/foobar.mac line 1)
45 (dbm:1) :bt <-- :bt digitado aqui lista os frames
46 #0: foo(y=5)(foobar.mac line 1)
47 #1: bar(x=2,y=3)(foobar.mac line 9)
49 (dbm:1) :n <-- Aqui digite :n para avançar linha
53 (dbm:1) :n <-- Aqui digite :n para avançar linha
57 (dbm:1) u; <-- Investiga o valor de u
60 (dbm:1) u: 33; <-- Altera u para ser 33
63 (dbm:1) :r <-- Digite :r para retomar a computação
68 O ficheiro @code{/tmp/foobar.mac} é o seguinte:
71 foo(y) := block ([u:y^2],
83 USO DO DEPURADOR ATRAVÉS DO EMACS E DE XMAXIMA
85 Se o utilizador estiver a executar o código sob o GNU Emacs numa janela
86 shell (shel dbl), ou estiver usando a interface gráfica,
87 @code{xmaxima}, então quando parar num ponto de parada, verá a sua
88 posição actual no ficheiro fonte apresentada na
89 outra metade da janela, ou em vermelho brilhante, ou com uma pequena
90 seta apontando na direita da linha. Poderá avançar uma linha por
91 vez digitando M-n (Alt-n).
93 No Emacs pode executar o Maxima numa shell @code{dbl}, o qual requer o
94 ficheiro @code{dbl.el} no directório elisp.
95 Verifique que tenha instalado os ficheiros elisp ou adicionado o directório elisp do Maxima ao seu caminho:
96 e.g., adicione o seguinte ao seu ficheiro @file{.emacs} ou ao seu ficheiro
100 (setq load-path (cons "/usr/share/maxima/5.9.1/emacs" load-path))
101 (autoload 'dbl "dbl")
110 pode iniciar uma janela shell na qual pode executar programas, por exemplo
111 Maxima, gcl, gdb etc. Essa janela de shell também reconhece informações sobre
112 depuração de código fonte, e mostra o código fonte em outra janela.
114 O utilizador pode escolher um ponto de parada em certa linha do
115 ficheiro digitando @code{C-x space}. Isso encontra qual a função
116 onde o cursor está posicionado, e mostra qual a linha daquela função
117 onde o cursor está habilitado. Se o cursor estiver habilitado, digamos, na linha
118 2 de @code{foo}, então isso irá inserir na outra janela o comando,
119 ``@code{:br foo 2}'', para parar @code{foo} nessa segunda linha.
120 Para ter isso habilitado, o utilizador deve ter
121 maxima-mode.el habilitado na janela na qual o ficheiro @code{foobar.mac} estiver interagindo.
122 Existe comandos adicional disponíveis naquela janela de ficheiro, 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, Definições para Depuração, Depuração do Código Fonte, Depuração
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 Keyword commands start with a colon, ':'.
132 Por exemplo, para avaliar um comando do Lisp,
133 pode escrever @code{:lisp} seguido pelo comando a ser avaliado.
140 O número de argumentos necessários depende do comando em particular.
141 Também, não precisa escrever o comando completo, apenas o suficiente
142 para ser único no meio das palavras chave de parada. Dessa forma
143 @code{:br} será suficiente para @code{:break}.
145 Os comandos de palavra chave são listados abaixo.
149 Escolhe um ponto de parada em uma função @code{F} na linha @code{n}
150 a partir do início da função.
151 Se @code{F} for dado como uma sequência de caracteres, então essa sequência de caracteres é assumida referir-se a
152 um ficheiro, e @code{n} é o deslocamente a partir do início do ficheiro.
153 O deslocamento é opcional. Se for omitido, é assumido ser zero
154 (primeira linha da função ou do ficheiro).
156 Imprime na tela uma lista da pilha de frames
158 Continua a computação
159 @c CAN'T SEEM TO GET :delete TO WORK !!!
161 Remove o ponto de parada seleccionado, ou todos se nenum for especificado
162 @c CAN'T SEEM TO GET :disable TO WORK !!!
164 Desabilita os pontos de parada seleccionados, ou todos se nenhum for especificado
165 @c CAN'T SEEM TO GET :enable TO WORK !!!
167 Habilita os pontos de de parada especificados, ou todos se nenhum for especificado
169 Imprime na tela a pilha de frame @code{n}, ou o corrente frame se nenhum for especificado
170 @c CAN'T SEEM TO GET :help TO WORK !!!
172 Imprime na tela a ajuda sobre um comando do depurador, ou todos os comandos se nenhum for especificado
173 @c CAN'T SEEM TO GET :info TO WORK !!!
175 Imprime na tela informações sobre um item
176 @item :lisp alguma-forma
177 Avalia @code{alguma-forma} como uma forma Lisp
178 @item :lisp-quiet alguma-forma
179 Avalia a forma Lisp @code{alguma-forma} sem qualquer saída
181 Como @code{:step}, excepto @code{:next} passos sobre chamadas de fução
183 Sai do nível corrente do depurador sem concluir a computação
185 Continua a computação
187 Continua a computação até encontraruma nova linha de códico
189 Retorne para a linha de comando do Maxima (saindo de qualquer nível do depurador) sem
190 completar a computação
194 @node Definições para Depuração, , Comandos Palavra Chave, Depuração
195 @section Definições para Depuração
197 @defvr {Variável de opção} refcheck
198 Valor por omissão: @code{false}
200 Quando @code{refcheck} for @code{true}, Maxima imprime uma mensagem
201 cada vez que uma variável associada for usada pela primeira vez em uma
206 @defvr {Variável de opção} setcheck
207 Valor por omissão: @code{false}
209 Se @code{setcheck} for escolhido para uma lista de variáveis (as quais podem
211 Maxima mostra uma mensagem quando as variáveis, ou
212 ocorrências subscritas delas, forem associadas com o
213 operador comum de atribuição @code{:}, o operador @code{::}
214 de atribuição, ou associando argumentos de função,
215 mas não com o operador de atribuição de função @code{:=} nem o operador de atribuição
217 A mensagem compreende o nome das variáveis e o
218 valor associado a ela.
220 @code{setcheck} pode ser escolhida para @code{all} ou @code{true} incluindo
221 desse modo todas as variáveis.
223 Cada nova atribuição de @code{setcheck} estabelece uma nova lista de variáveis
224 para verificar, e quaisquer variáveis previamente atribuídas a @code{setcheck} são esquecidas.
226 Os nomes atribuídos a @code{setcheck} devem ter um apóstrofo no início se eles forem de outra forma
227 avaliam para alguma outra coisa que não eles mesmo.
228 Por exemplo, se @code{x}, @code{y}, e @code{z} estiverem actualmente associados, então digite
231 setcheck: ['x, 'y, 'z]$
234 para colocá-los na lista de variáveis monitoradas.
236 Nenhuma saída é gerada quando uma
237 variável na lista @code{setcheck} for atribuída a sí mesma, e.g., @code{X: 'X}.
241 @defvr {Variável de opção} setcheckbreak
242 Valor por omissão: @code{false}
244 Quando @code{setcheckbreak} for @code{true},
245 Maxima mostrará um ponto de parada
246 quando uma variável sob a lista @code{setcheck} for atribuída a um novo valor.
247 A parada ocorre antes que a atribuíção seja concluída.
248 Nesse ponto, @code{setval} retém o valor para o qual a variável está
250 Consequentemente, se pode atribuir um valor diferente através da atribuição a @code{setval}.
252 Veja também @code{setcheck} e @code{setval}.
256 @defvr {Variável de sistema} setval
257 Mantém o valor para o qual a variável está para ser escolhida quando
258 um @code{setcheckbreak} ocorrer.
259 Consequentemente, se pode atribuir um valor diferente através da atribuição a @code{setval}.
261 Veja também @code{setcheck} e @code{setcheckbreak}.
265 @deffn {Função} timer (@var{f_1}, ..., @var{f_n})
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 colectadas.
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.
273 @code{timer} retorna a lista das funções tempo estatisticamente monitoradas.
275 Maxima armazena quanto tempo é empregado executando cada função
276 na lista de funções tempo estatisticamente monitoradas.
277 @code{timer_info} retorna a coronometragem estatística, incluindo o
278 tempo médio decorrido por chamada de função, o número de chamadas, e o
279 tempo total decorrido.
280 @code{untimer} remove funções da lista de funções tempo estatisticamente monitoradas.
282 @code{timer} não avalia seus argumentos.
283 @code{f(x) := x^2$ g:f$ timer(g)$} não coloca @code{f} na lista de funções estatisticamente monitoradas.
285 Se @code{trace(f)} está vigorando, então @code{timer(f)} não tem efeito; @code{trace} e
286 @code{timer} não podem ambas atuarem ao mesmo tempo.
288 Veja também @code{timer_devalue}.
291 @deffn {Função} untimer (@var{f_1}, ..., @var{f_n})
292 @deffnx {Função} untimer ()
293 Dadas as funções @var{f_1}, ..., @var{f_n},
294 @code{untimer} remove cada uma das funções listadas da lista de funções estatisticamente monitoradas.
296 Sem argumentos, @code{untimer} remove todas as funções actualmente na lista de funções estatisticamente monitoradas.
298 Após @code{untimer (f)} ser executada, @code{timer_info (f)} ainda retorna
299 estatisticas de tempo previamente colectadas,
300 embora @code{timer_info()} (sem argumentos) não
301 retorna informações sobre qualquer função que não estiver actualmente na lista de funções tempo estatisticamente monitoradas.
302 @code{timer (f)} reposiciona todas as estatisticas de tempo para zero
303 e coloca @code{f} na lista de funções estatisticamente monitoradas novamente.
307 @defvr {Variável de opção} timer_devalue
308 Valor Padrão: @code{false}
310 Quando @code{timer_devalue} for @code{true}, Maxima subtrai de cada função estatisticamente monitorada
311 o tempo empregado em ou funções estatisticamente monitoradas. De outra forma, o tempo reportado
312 para cada função inclui o tempo empregado em outras funções.
313 Note que tempo empregado em funções não estatisticamente monitoradas não é subtraído do
316 Veja também @code{timer} e @code{timer_info}.
320 @deffn {Função} timer_info (@var{f_1}, ..., @var{f_n})
321 @deffnx {Função} timer_info ()
322 Dadas as funções @var{f_1}, ..., @var{f_n},
323 @code{timer_info} retorna uma matriz contendo informações de cronometragem para cada função.
324 Sem argumentos, @code{timer_info} retorna informações de cronometragem para
325 todas as funções actualmente na lista de funções estatisticamente monitoradas.
327 A matriz retornada através de @code{timer_info} contém o nome da função,
328 tempo por chamda de função, número de chamadas a funções,tempo total,
329 e @code{gctime}, cujja forma "tempo de descarte" no Macsyma original
330 mas agora é sempre zero.
332 Os dados sobre os quais @code{timer_info} constrói seu valor de retorno
333 podem também serem obtidos através da função @code{get}:
336 get(f, 'calls); get(f, 'runtime); get(f, 'gctime);
339 Veja também @code{timer}.
343 @deffn {Função} trace (@var{f_1}, ..., @var{f_n})
344 @deffnx {Função} trace ()
345 Dadas as funções @var{f_1}, ..., @var{f_n},
346 @code{trace} instrui Maxima para mostrar
347 informações de depuração quando essas funções forem chamadas.
348 @code{trace(f)$ trace(g)$} coloca @code{f} e então @code{g} na lista de funções
349 para serem colocadas sob a ação de @code{trace}; a lista acumula de uma chamada para a seguinte.
352 @code{trace} retorna uma lista de todas as funções actualmente sob a ação de @code{trace}.
354 A função @code{untrace} desabilita a ação de @code{trace}.
355 Veja também @code{trace_options}.
357 @code{trace} não avalia seus argumentos. Dessa forma,
358 @code{f(x) := x^2$ g:f$ trace(g)$} não coloca @code{f} sobre a lista de funções monitoradas por @code{trace}.
360 Quando uma função for redefinida, ela é removida da lista de @code{timer}.
361 Dessa forma após @code{timer(f)$ f(x) := x^2$},
362 a função @code{f} não mais está na lista de @code{timer}.
364 Se @code{timer (f)} estiver em efeito, então @code{trace (f)} não está agindo; @code{trace} e
365 @code{timer} não podem ambas estar agindo para a mesma função.
369 @deffn {Função} trace_options (@var{f}, @var{option_1}, ..., @var{option_n})
370 @deffnx {Função} trace_options (@var{f})
371 Escolhe as opções de @code{trace} para a função @var{f}.
372 Quaisquer opções anteriores são substituídas.
373 @code{trace_options (@var{f}, ...)} não tem efeito a menos que
374 @code{trace (@var{f})} tenha sido também chamada (ou antes ou após @code{trace_options}).
376 @code{trace_options (@var{f})} reposiciona todas as opções para seus valores padrão.
378 As opções de palavra chave são:
383 Não mostre uma mensagem na entrada da função e saia.
386 Coloque um ponto de parada antes da função ser inserida,
387 e após a funçãos er retirada. Veja @code{break}.
390 Mostre argumentos e valores de retorno com objectos Lisp.
393 Mostre @code{-> true} na entrada da funçào e saia.
396 Capture os erros, fornecendo a opção para sinalizar um erro,
397 tentar novamente a chamada de função, ou especificar um valor de retorno.
400 Opções para @code{trace} são especificadas em duas formas. A presença da palavra chave de
401 opção sozinha coloca a opção para ter efeito incondicionalmente.
402 (Note que opção @var{foo} não coloca para ter efeito especificando
403 @code{@var{foo}: true} ou uma forma similar; note também que palavras chave não precisam
404 estar com apóstrofo.) Especificando a opção palavra chave com uma função
405 predicado torna a opção condicional sobre o predicado.
407 A lista de argumentos para a função predicado é sempre
408 @code{[level, direction, function, item]} onde @code{level} é o nível rerecursão
409 para a função, @code{direction} é ou @code{enter} ou @code{exit}, @code{function} é o
410 nome da função, e @code{item} é a lista de argumentos (sobre entrada)
411 ou o valor de retorno (sobre a saída).
413 Aqui está um exemplo de opções incondicionais de @code{trace}:
416 (%i1) ff(n) := if equal(n, 0) then 1 else n * ff(n - 1)$
420 (%i3) trace_options (ff, lisp_print, break)$
425 Aqui está a mesma função, com a opção @code{break} condicional
429 (%i5) trace_options (ff, break(pp))$
431 (%i6) pp (level, direction, function, item) := block (print (item),
432 return (function = 'ff and level = 3 and direction = exit))$
439 @deffn {Função} untrace (@var{f_1}, ..., @var{f_n})
440 @deffnx {Função} untrace ()
441 Dadas as funções @var{f_1}, ..., @var{f_n},
442 @code{untrace} desabilita a a monitoração habilitada pela função @code{trace}.
443 Sem argumentos, @code{untrace} desabilita a atuação da função @code{trade} para todas as funções.
445 @code{untrace} retorne uma lista das funções para as quais
446 @code{untrace} desabilita a atuação de @code{trace}.