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】。文章转载请联系作者。









评论