読者です 読者をやめる 読者になる 読者になる

バックトレースとか、スタックフレームのこと

guile

さて、現在のスタック・トレースを得るには make-stack 関数を呼び出します。
引数の #t を忘れないようにしてください:

(define a-stack (make-stack #t))

a-stack の型をとりあえず <stack> としましょう。
<stack> オブジェクトの中には <frame> オブジェクトが幾つか含まれています。
<frame> オブジェクトを取り出すには stack-ref 関数を使います。

また、<stack> オブジェクトの中に含まれている <frame> オブジェクトの数は stack-length 関数で知ることができます。
<stack> オブジェクトの中に含まれている全ての <frame> オブジェクトをリストとして得たいということだってありますよね。
stack->frames 関数を使えば、それができます。
これは、guileソースコードの中のテストコードから取ってきたものです:

(define (stack->frames stack)
  "Return the list of frames comprising STACK."
  (unfold (lambda (i)
            (>= i (stack-length stack)))
          (lambda (i)
            (stack-ref stack i))
          1+
          0))

<frame> オブジェクトに対しては frame? だとか frame-procedure などの関数が使えます。
が、関数を呼んでいるファイルパスやら行数などはなんかとれなさそうです。

Why Guile People!!!??