在Chez-Scheme调试模式下能否获取当前raise continuation?
在Chez Scheme的调试模式下可以直接获取当前的raise continuation,具体操作方式如下:
操作方法
1. 调试模式内直接获取
进入debug>提示符后,按以下步骤操作:
- 输入
e进入当前上下文的求值环境,此时环境中内置的*exception-continuation*变量就是当前的raise continuation对象 - 直接执行
(inspect *exception-continuation*)就能进入你之前敲i得到的continuation检查界面,也可以把它赋值给自定义变量持久保存
示例操作(承接你之前的调试流程):
#<continuation in fn2> : e > (inspect *exception-continuation*) #<continuation in fn2> : sf 0: #<continuation in fn2> 1: #<continuation in fn1> 2: #<system continuation in new-cafe> # 效果和你之前手动敲i检查完全一致 > (define my-cont *exception-continuation*) > (procedure? my-cont) #t
2. 预先捕获raise continuation(可选)
如果你不想每次报错后手动进调试器取,也可以在运行目标代码前包裹异常处理器,提前捕获raise continuation:
(define saved-raise-cont #f) ;; 运行目标代码,自动捕获raise continuation (with-exception-handler (lambda (exn) ;; 捕获raise continuation并存到变量 (call/cc (lambda (k) (set! saved-raise-cont k))) ;; 继续抛出异常,不影响原有报错流程 (raise exn)) (lambda () (fn1 100)))
运行后saved-raise-cont就存储了报错时的raise continuation,你可以随时用(inspect saved-raise-cont)检查。
内容的提问来源于stack exchange,提问作者chansey
相关产品推荐
相关产品推荐

