get-backtrace (プロシージャ)
public {get-backtrace max-frames:int = max-int}:String
パッケージ: CURL.RUNTIME.DEBUGGER-SUPPORT

スタックのバックトレースを、フォーマットされた文字列として返します。

depth: 含まれるスタック情報の最大数。

説明

現在の実行スタックの内容を、新しい String 内の指定 depth まで返します。 ソース ファイルの情報は、(pcurl ファイルがデバッグ情報と共に作成されない限り)組み込まれている RTE のパッケージや pcurl のパッケージに基づくコード のリストではありません。更に、行番号はデバッグ可能なアプレットで実行されたコードでのみ使用できます。

プログラミング注意事項

このプロシージャは、Curl コードのデバッグおよびテストでの使用、またはデバックまたはテスト用ツールの開発のためだけに用意されており、マシン解析で使用するものではありません。
重要 : スタック情報のフォーマットまたは内容そのものは予測できません。プラットフォーム、Curl のバージョン、または実行時の状況において、異なるフォーマットが使われる可能性があります。

次のパッケージでは、assert マクロの非致命的なバリアントが定義されています。例外をスローする代わりに、標準のエラーストリームに失敗のメッセージとバックトレースを書き込み、グローバルの失敗カウンタ値を増やします。
{curl 8.0 package}
{package NON-FATAL-ASSERT}
{import Literal from CURL.LANGUAGE.SOURCE}
{import get-backtrace from CURL.RUNTIME.DEBUGGER-SUPPORT}
{let public assertion-failures:int = 0}
{define-macro public {non-fatal-assert ?exp:expression}
    {return
        {expand-template
            {if not ?exp then
                {format 
                    out = {get-stderr}, 
                    "Assertion failed: '%s'\n%s", 
                    ?{Literal {{exp.get-text}.to-String}},
                    {get-backtrace}
                }
                set assertion-failures = assertion-failures + 1
            }
        }
    }
}
このパッケージを次のアプレットで使用すると、
{curl 8.0 applet}
{import * from NON-FATAL-ASSERT}
{define-proc {foo}:void
    {non-fatal-assert 1 + 1 == 3}
}
{define-proc {bar}:void
    {foo}
}
{bar}
次のような結果が生成されます。
Assertion failed: '1 + 1 == 3'
#0   (0x2afd3dbe) get-backtrace
#1   (0x2bb19217) foo at http://www.mysite/foo.curl:4[4]
#2   (0x2bc8f225) bar at http://www.mysite/foo.curl:7[5]
#3   (0x2bb19285) :top-level-form at http://www.mysite/foo.curl:9[1]