这是Clojure 的后续:编译时插入 pre/post 函数
我的目标是调用调试函数而不是抛出异常。我正在寻找存储堆栈帧、函数调用及其参数列表的最佳方法,以完成此任务。
我想要一个函数(my-uber-debug),这样当我调用它(而不是抛出异常)时,会发生以下事情:
- 弹出一个新的 Java 窗口
- 有当前clojure栈帧的记录
- 对于每个堆栈帧,都有传递给函数的参数的记录
这样我就可以向上/向下移动堆栈帧,并检查传递的参数以到达当前点。[如果不知何故,神奇地,我们可以得到在“让”环境中定义的变量,那也太棒了。]
目前的想法
我将有一个线程局部变量uber-debug,其类型为: List of StackFrames where StackFrame = function + arguments
在每次函数调用时,它将推送(将当前函数 + 参数传递给uber-debug),然后在函数调用结束时,它将从uber-debug中删除第一个元素
然后,当我调用 (my-uber-debug) 时,它只是弹出一个新的 java 窗口,让我与uber-debug交互
问题
到目前为止,我的想法可能并不适合设置它。解决这个问题的正确方法是什么?
编辑:
问题不在于 Swing/GUI 部分。它是关于如何存储堆栈帧的。
谢谢!