これはClojure のフォローアップです: Pre/Post 関数のコンパイル時挿入
私の目標は、例外をスローする代わりにデバッグ関数を呼び出すことです。これを達成するために、スタック フレーム、関数呼び出し、およびそれらの引数のリストを保存する最良の方法を探しています。
関数 (my-uber-debug) が必要なので、(例外をスローする代わりに) 関数を呼び出すと、次のことが起こります。
- 新しい Java ウィンドウがポップアップします
- 現在のclojureスタック フレームの記録があります
- スタック フレームごとに、関数に渡された引数の記録があります。
これは、スタック フレームを上下に移動し、渡された引数を調べて現在のポイントに到達できるようにするためです。[どういうわけか、魔法のように、「let」環境で定義された変数を取得できれば、それも素晴らしいことです。]
現在のアイデア
スレッド ローカル変数uber-debugを用意します。この変数の型は次のとおりです: List of StackFrames where StackFrame = function + arguments
各関数呼び出しでプッシュし (cons 現在の関数 + uber-debugへの引数)、関数呼び出しの最後にuber-debugから最初の要素を削除します。
次に、(my-uber-debug) を呼び出すと、新しい Java ウィンドウがポップアップ表示され、uber-debugを操作できるようになります。
質問
これまでのアイデアは、おそらくこれを設定するには理想的ではありません。この問題を解決する正しい方法は何ですか?
編集:
質問は Swing/GUI 部分に関するものではありません。スタックフレームの格納方法についてです。
ありがとう!