Byteman 使用指南(十)
跟踪和调试操作
1. 调试(Debug)
规则引擎提供了一个简单的内置 debug
方法,用于在规则执行期间有条件地显示消息。帮助器类定义的 API 如下:
debug
:将提供的消息打印到System.out
,并以正在执行的规则名称作为前缀。此方法始终返回true
,允许调试消息在条件表达式中通过AND
与其他布尔表达式结合使用。
通过在 JVM 命令行上设置以下系统属性,可控制调试消息的生成:
2. 跟踪(Trace)
规则引擎提供了一组内置方法,用于在执行期间记录跟踪消息。消息可以输出到 System.out
、System.err
或指定文件。帮助器类定义的 API 如下:
traceOpen
:打开由filename
指定的文件,将其与identifier
关联,并返回true
。filename
可以是相对路径或绝对路径。相对路径文件位于 JVM 的当前工作目录下。如果已有文件与identifier
关联,traceOpen
将立即返回false
;若文件已存在,则以追加模式打开;若未提供filename
,将自动生成一个唯一的文件名。traceClose
:关闭与identifier
关联的文件并解除关联,返回true
;若未找到关联文件,则返回false
。trace
:将消息打印到与identifier
关联的文件,并返回true
;若无关联文件,将自动创建一个文件并完成关联。traceln
:与trace
类似,但会在消息后附加一个换行符。若
identifier
被省略或为null
,消息将写入System.out
;若为字符串"err"
,消息将写入System.err
。
特殊情况:
当
identifier
为null
或"out"
时,trace
和traceln
会输出到System.out
;若为"err"
,则输出到System.err
。对于这些特殊值,traceOpen
和traceClose
始终返回false
。
堆栈管理操作
1. 检查调用树
规则引擎提供了一组内置方法,用于检查规则触发时的调用栈。帮助器类定义的 API 如下:
callerCheck
:检查从startFrame
开始的调用栈帧(共frameCount
个),若任意帧匹配则返回true
。startFrame
:默认为 1,表示触发方法的调用者栈帧(0 表示触发方法本身)。frameCount
:默认为 1,即仅检查触发方法调用者的栈帧。includeClass
和includePackage
:若为false
,仅比较裸方法名;若为true
,则分别比较类限定名或完全限定名。isRegExp
:若为true
,使用正则表达式匹配;否则使用字符串精确匹配。
2. 跟踪调用栈
规则引擎提供了一组方法,用于记录或格式化调用栈的字符串表示。API 定义如下:
formatStack
:生成调用栈的字符串表示,包括完全限定的方法名、文件及行号,按行分隔。traceStack
:调用formatStack
生成调用栈字符串,并将其写入跟踪文件。
使用正则表达式可筛选部分栈帧,相关方法如下:
3. 跟踪线程调用栈
支持记录特定线程或所有线程的调用栈:
默认帮助器生命周期方法
默认帮助器提供了四个生命周期方法,在 System.out
中生成调试消息。例如:
通过这些方法,开发者可以有效管理和调试规则的执行过程,确保规则的正确性和高效性。
版权声明: 本文为 InfoQ 作者【FunTester】的原创文章。
原文链接:【http://xie.infoq.cn/article/4abacc0cfde5fa0ed24fe5ba1】。文章转载请联系作者。
评论