2个版本
0.1.5 | 2022年8月25日 |
---|---|
0.1.4 | 2022年8月10日 |
0.1.2 |
|
#435 in 过程宏
1,956 每月下载
在 3 crates 中使用
24KB
363 行
debugger_test
提供了一种简单的方法将调试器特定测试集成到一个crate中。
此crate负责生成#[debugger_test]
过程宏属性。
用法
要使用,请在您的Cargo.toml
中将此crate和debugger_test_parser
添加为依赖项。
此crate使用debugger_test_parser
来解析指定调试器的输出并验证是否找到了所有预期的语句。
为了设置断点,需要在调试器应停止的每个位置定义并调用一个__break()
函数。
例如
#[inline(never)]
fn __break() { }
#[debugger_test(
debugger = "cdb",
commands = r#"
.nvlist
dv
g"#,
expected_statements = r#"
pattern:test\.exe .*\.natvis
a = 0n10
"#)]
fn test() {
let a = 10;
__break();
}
#[debugger_test]
过程宏属性有3个必需的元项,它们都接受字符串值
- debugger
- commands
- expected_statements
debugger
元项期望一个受支持的调试器的名称。目前唯一支持的调试器是cdb
。此crate将尝试查找指定的调试器,首先通过测试它是否在PATH
上。如果未找到调试器,此crate将在调试器的默认安装目录中搜索。目前不支持指定用于调试器的确切路径。
commands
元项期望一个要运行的调试器命令的字符串。要运行多个命令,请使用换行符(\n
)分隔每个命令。
expected_statements
元素期望在调试器输出中验证的输出字符串。每个语句应通过换行符(\n
)分隔。
例如
#[debugger_test(
debugger = "cdb",
commands = "command1\ncommand2\ncommand3",
expected_statements = "statement1\nstatement2\nstatement3")]
也支持使用多行字符串。
#[debugger_test(
debugger = "cdb",
commands = r#"
command1
command2
command3"#,
expected_statements = r#"
statement1
statement2
statement3"#)]
对于给定的 expected_statement
,也支持模式匹配。对于期望的语句,使用前缀 pattern:
。这对于忽略包含内存地址和/或路径的调试器输出非常有用。
#[debugger_test(
debugger = "cdb",
commands = "command3",
expected_statements = "pattern:abc.*")]
#[debugger_test]
进程宏属性将生成一个新的测试函数,该函数将带有 #[test]
属性。生成的测试函数将为测试名称添加后缀,以确保测试的唯一性。在上面的示例中,进程宏属性将生成以下函数
#[test]
fn test__cdb() {
.....
test();
.....
}
进程宏属性将生成一个测试函数,执行以下操作
- 启动指定的调试器
- 将调试器附加到当前测试可执行进程
- 在
__break()
函数的所有调用位置设置断点 - 将调试器运行到调试器指定的第一个断点
- 运行所有用户指定的命令并退出调试器
- 使用
debugger_test_parser
crate 解析调试器输出,并验证是否找到了所有expected_statements
根据 #[debugger_test]
属性指定的调试器,用于启动调试器的路径将是以下之一
- 如果环境变量 debugger_type _DEBUGGER_DIR 已设置,即
CDB_DEBUGGER_DIR
,进程宏属性将尝试从该目录启动调试器 - 给定调试器的默认安装目录(如果在该路径存在的话)
- 直接调用可执行文件,例如
cdb
或cdb.exe
,具体取决于操作系统
贡献
此项目欢迎贡献和建议。大多数贡献都需要您同意贡献者许可协议(CLA),声明您有权并且实际上授予我们使用您的贡献的权利。有关详细信息,请访问 https://cla.opensource.microsoft.com。
当您提交拉取请求时,CLA 机器人将自动确定您是否需要提供 CLA,并相应地装饰 PR(例如,状态检查,注释)。只需遵循机器人提供的说明。您只需在整个使用我们的 CLA 的存储库中进行一次即可。
此项目已采用 Microsoft 开源行为准则。有关更多信息,请参阅 行为准则常见问题解答 或联系 [email protected] 以提出任何额外的问题或评论。
商标
本项目可能包含项目、产品或服务的商标或标志。Microsoft 商标或标志的授权使用必须遵循并遵守 Microsoft 的商标及品牌指南。在修改后的本项目中使用 Microsoft 商标或标志不得引起混淆或暗示获得 Microsoft 的赞助。第三方商标或标志的使用须遵守第三方政策。
依赖项
~1.5MB
~39K SLoC