Previous: Comandos Palavra Chave, Up: Depurando [Contents][Index]

### 41.3 Funções e Variáveis Definidas para Depuração

Variável de opção: refcheck

  Valor padrão: `false`

  Quando `refcheck` for `true`, Maxima imprime uma mensagem cada vez que uma variável associada for usada pela primeira vez em uma computação.

Variável de opção: setcheck

  Valor padrão: `false`

  Se `setcheck` for escolhido para uma lista de variáveis (as quais podem ser subscritas), Maxima mostra uma mensagem quando as variáveis, ou ocorrências subscritas delas, forem associadas com o operador comum de atribuição `:`, o operador `::` de atribuição, ou associando argumentos de função, mas não com o operador de atribuição de função `:=` nem o operador de atribuição `::=` de macro. A mensagem compreende o nome das variáveis e o valor associado a ela.

  `setcheck` pode ser escolhida para `all` ou `true` incluindo desse modo todas as variáveis.

  Cada nova atribuição de `setcheck` estabelece uma nova lista de variáveis para verificar, e quaisquer variáveis previamente atribuídas a `setcheck` são esquecidas.

  Os nomes atribuídos a `setcheck` devem ter um apóstrofo no início se eles forem de outra forma avaliam para alguma outra coisa que não eles mesmo. Por exemplo, se `x`, `y`, e `z` estiverem atualmente associados, então digite

      setcheck: ['x, 'y, 'z]$

  para colocá-los na lista de variáveis monitoradas.

  Nenhuma saída é gerada quando uma variável na lista `setcheck` for atribuída a sí mesma, e.g., `X: 'X`.

Variável de opção: setcheckbreak

  Valor padrão: `false`

  Quando `setcheckbreak` for `true`, Maxima mostrará um ponto de parada quando uma variável sob a lista `setcheck` for atribuída a um novo valor. A parada ocorre antes que a atribuíção seja concluída. Nesse ponto, `setval` retém o valor para o qual a variável está para ser atribuída. Conseqüentemente, se pode atribuir um valor diferente através da atribuição a `setval`.

  Veja também `setcheck` e `setval`.

Variável de sistema: setval

  Mantém o valor para o qual a variável está para ser escolhida quando um `setcheckbreak` ocorrer. Conseqüentemente, se pode atribuir um valor diferente através da atribuição a `setval`.

  Veja também `setcheck` e `setcheckbreak`.

Função: timer (f_1, ..., f_n)
Função: timer (all)
Função: timer ()

  Dadas as funções f_1, ..., f_n, `timer` coloca cada uma na lista de funções para as quais cronometragens estatísticas são coletadas. `timer(f)$ timer(g)$` coloca `f` e então `g` sobre a lista; a lista acumula de uma chamada para a chamada seguinte.

  `timer(all)` coloca todas as funções definidas pelo usuário (a saber pela variável global `functions`) na lista de funções monitoradas pela função `time`.

  Sem argumentos, `timer` retorna a lista das funções tempo estatisticamente monitoradas.

  Maxima armazena quanto tempo é empregado executando cada função na lista de funções tempo estatisticamente monitoradas. `timer_info` retorna a coronometragem estatística, incluindo o tempo médio decorrido por chamada de função, o número de chamadas, e o tempo total decorrido. `untimer` remove funções da lista de funções tempo estatisticamente monitoradas.

  `timer` não avalia seus argumentos. `f(x) := x^2$ g:f$ timer(g)$` não coloca `f` na lista de funções estatisticamente monitoradas.

  Se `trace(f)` está vigorando, então `timer(f)` não tem efeito; `trace` e `timer` não podem ambas atuarem ao mesmo tempo.

  Veja também `timer_devalue`.

Função: untimer (f_1, ..., f_n)
Função: untimer ()

  Dadas as funções f_1, ..., f_n, `untimer` remove cada uma das funções listadas da lista de funções estatisticamente monitoradas.

  Sem argumentos, `untimer` remove todas as funções atualmente na lista de funções estatisticamente monitoradas.

  Após `untimer (f)` ser executada, `timer_info (f)` ainda retorna estatisticas de tempo previamente coletadas, embora `timer_info()` (sem argumentos) não retorna informações sobre qualquer função que não estiver atualmente na lista de funções tempo estatisticamente monitoradas. `timer (f)` reposiciona todas as estatisticas de tempo para zero e coloca `f` na lista de funções estatisticamente monitoradas novamente.

Variável de opção: timer_devalue

  Valor Padrão: `false`

  Quando `timer_devalue` for `true`, Maxima subtrai de cada função estatisticamente monitorada o tempo empregado em ou funções estatisticamente monitoradas. De outra forma, o tempo reportado para cada função inclui o tempo empregado em outras funções. Note que tempo empregado em funções não estatisticamente monitoradas não é subtraído do tempo total.

  Veja também `timer` e `timer_info`.

Função: timer_info (f_1, ..., f_n)
Função: timer_info ()

  Dadas as funções f_1, ..., f_n, `timer_info` retorna uma matriz contendo informações de cronometragem para cada função. Sem argumentos, `timer_info` retorna informações de cronometragem para todas as funções atualmente na lista de funções estatisticamente monitoradas.

  A matriz retornada através de `timer_info` contém o nome da função, tempo por chamda de função, número de chamadas a funções,tempo total, e `gctime`, cujja forma "tempo de descarte" no Macsyma original mas agora é sempre zero.

  Os dados sobre os quais `timer_info` constrói seu valor de retorno podem também serem obtidos através da função `get`:

      get(f, 'calls);  get(f, 'runtime);  get(f, 'gctime);

  Veja também `timer`.

Função: trace (f_1, ..., f_n)
Função: trace (all)
Função: trace ()

  Dadas as funções f_1, ..., f_n, `trace` instrui Maxima para mostrar informações de depuração quando essas funções forem chamadas. `trace(f)$ trace(g)$` coloca `f` e então `g` na lista de funções para serem colocadas sob a ação de `trace`; a lista acumula de uma chamada para a seguinte.

  `trace(all)` coloca todas as funções definidas pelo usuário (a saber pela variável global `functions`) na lista de funções a serem monitoradas pela função `trace`.

  Sem argumentos, `trace` retorna uma lista de todas as funções atualmente sob a ação de `trace`.

  A função `untrace` desabilita a ação de `trace`. Veja também `trace_options`.

  `trace` não avalia seus argumentos. Dessa forma, `f(x) := x^2$ g:f$ trace(g)$` não coloca `f` sobre a lista de funções monitoradas pela função `trace`.

  Quando uma função for redefinida, ela é removida da lista de `timer`. Dessa forma após `timer(f)$ f(x) := x^2$`, a função `f` não mais está na lista de `timer`.

  Se `timer (f)` estiver em efeito, então `trace (f)` não está agindo; `trace` e `timer` não podem ambas estar agindo para a mesma função.

Função: trace_options (f, option_1, ..., option_n)
Função: trace_options (f)

  Escolhe as opções de `trace` para a função f. Quaisquer opções anteriores são substituídas. `trace_options (f, ...)` não tem efeito a menos que `trace (f)` tenha sido também chamada (ou antes ou após `trace_options`).

  `trace_options (f)` reposiciona todas as opções para seus valores padrão.

  As opções de palavra chave são:

  - `noprint` Não mostre uma mensagem na entrada da função e saia.
  - `break` Coloque um ponto de parada antes da função ser inserida, e após a funçãos er retirada. Veja `break`.
  - `lisp_print` Mostre argumentos e valores de retorno com objetos Lisp.
  - `info` Mostre `-> true` na entrada da funçào e saia.
  - `errorcatch` Capture os erros, fornecendo a opção para sinalizar um erro, tentar novamente a chamada de função, ou especificar um valor de retorno.

  Opções para `trace` são especificadas em duas formas. A presença da palavra chave de opção sozinha coloca a opção para ter efeito incondicionalmente. (Note que opção foo não coloca para ter efeito especificando `foo: true` ou uma forma similar; note também que palavras chave não precisam estar com apóstrofo.) Especificando a opção palavra chave com uma função predicado torna a opção condicional sobre o predicado.

  A lista de argumentos para a função predicado é sempre `[level, direction, function, item]` onde `level` é o nível rerecursão para a função, `direction` é ou `enter` ou `exit`, `function` é o nome da função, e `item` é a lista de argumentos (sobre entrada) ou o valor de retorno (sobre a saída).

  Aqui está um exemplo de opções incondicionais de `trace`:

      (%i1) ff(n) := if equal(n, 0) then 1 else n * ff(n - 1)$

      (%i2) trace (ff)$

      (%i3) trace_options (ff, lisp_print, break)$

      (%i4) ff(3);

  Aqui está a mesma função, com a opção `break` condicional sobre um predicado:

      (%i5) trace_options (ff, break(pp))$

      (%i6) pp (level, direction, function, item) := block (print (item),
          return (function = 'ff and level = 3 and direction = exit))$

      (%i7) ff(6);

Função: untrace (f_1, ..., f_n)
Função: untrace ()

  Dadas as funções f_1, ..., f_n, `untrace` desabilita a a monitoração habilitada pela função `trace`. Sem argumentos, `untrace` desabilita a atuação da função `trade` para todas as funções.

  `untrace` retorne uma lista das funções para as quais `untrace` desabilita a atuação de `trace`.

Previous: Comandos Palavra Chave, Up: Depurando [Contents][Index]