Para algumas aplicações, esse número pode ser muito pequeno, mas pode ser aumentado com o parâmetro
-:aNUMBER
, onde NUMBER
é o número de chamadas a ser mostrado (http://chicken.wiki.br/Using%20the%20compiler#runtime-options).Abaixo está um exemplo de uma situação onde o aumento do stack trace pode ser útil:
(define (l) (error 'oops))
(define (k) (l))
(define (j) (k))
(define (i) (j))
(define (h) (i))
(define (g) (h))
(define (f) (g))
(define (e) (f))
(define (d) (e))
(define (c) (d))
(define (b) (c))
(define (a) (b))
(a)
Executando este código com o interpretador, temos:
$ csi -s oops.scm
Error: oops
Call history:
[e] (f)
[f] (g)
[g] (h)
[h] (i)
[i] (j)
[j] (k)
[k] (l)
[l] (error (quote oops)) <--
Com esse relatório, não fica claro que quem originou a chamada de
l
foi a
. Mas, se aumentarmos o tamanho do relatório:
$ csi -:a14 -s oops.scm
Error: oops
Call history:
(a)
(a)
[a] (b)
[b] (c)
[c] (d)
[d] (e)
[e] (f)
[f] (g)
[g] (h)
[h] (i)
[i] (j)
[j] (k)
[k] (l)
[l] (error (quote oops)) <--
O parâmetro
-:aNUMBER
também é válido para programas compilados com o compilador de Chicken (csc
):
$ csc oops.scm
$ ./oops
Error: oops
Call history:
oops.scm: 8 f
oops.scm: 7 g
oops.scm: 6 h
oops.scm: 5 i
oops.scm: 4 j
oops.scm: 3 k
oops.scm: 2 l
oops.scm: 1 error <--
$ ./oops -:a14
Error: oops
Call history:
oops.scm: 14 a
oops.scm: 12 b
oops.scm: 11 c
oops.scm: 10 d
oops.scm: 9 e
oops.scm: 8 f
oops.scm: 7 g
oops.scm: 6 h
oops.scm: 5 i
oops.scm: 4 j
oops.scm: 3 k
oops.scm: 2 l
oops.scm: 1 error <--
Um comentário:
Mario, bom saber disso.
Uma coisa útil seria deixar claro no relatório que o stack trace foi cortado devido a ter chegado no limite de seu tamanho, embora parece que o relatório completo repete a chamada raiz no topo (ao menos no seu exemplo), então nesse caso é possível saber quando o relatório é completo ou não.
Postar um comentário