#debugging #cdb #natvis #run-command #proc-macro #proc-macro-attributes #debugger-visualizer

debugger_test

提供了一种过程宏,用于编写在验证输出时启动调试器和运行命令的测试

2个版本

0.1.5 2022年8月25日
0.1.4 2022年8月10日
0.1.2 2022年7月27日

#435 in 过程宏

Download history 172/week @ 2024-03-13 261/week @ 2024-03-20 328/week @ 2024-03-27 406/week @ 2024-04-03 269/week @ 2024-04-10 316/week @ 2024-04-17 151/week @ 2024-04-24 206/week @ 2024-05-01 191/week @ 2024-05-08 321/week @ 2024-05-15 382/week @ 2024-05-22 246/week @ 2024-05-29 442/week @ 2024-06-05 688/week @ 2024-06-12 358/week @ 2024-06-19 429/week @ 2024-06-26

1,956 每月下载
3 crates 中使用

MIT/Apache

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个必需的元项,它们都接受字符串值

  1. debugger
  2. commands
  3. 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();
    .....
}

进程宏属性将生成一个测试函数,执行以下操作

  1. 启动指定的调试器
  2. 将调试器附加到当前测试可执行进程
  3. __break() 函数的所有调用位置设置断点
  4. 将调试器运行到调试器指定的第一个断点
  5. 运行所有用户指定的命令并退出调试器
  6. 使用 debugger_test_parsercrate 解析调试器输出,并验证是否找到了所有 expected_statements

根据 #[debugger_test] 属性指定的调试器,用于启动调试器的路径将是以下之一

  1. 如果环境变量 debugger_type _DEBUGGER_DIR 已设置,即 CDB_DEBUGGER_DIR,进程宏属性将尝试从该目录启动调试器
  2. 给定调试器的默认安装目录(如果在该路径存在的话)
  3. 直接调用可执行文件,例如 cdbcdb.exe,具体取决于操作系统

贡献

此项目欢迎贡献和建议。大多数贡献都需要您同意贡献者许可协议(CLA),声明您有权并且实际上授予我们使用您的贡献的权利。有关详细信息,请访问 https://cla.opensource.microsoft.com

当您提交拉取请求时,CLA 机器人将自动确定您是否需要提供 CLA,并相应地装饰 PR(例如,状态检查,注释)。只需遵循机器人提供的说明。您只需在整个使用我们的 CLA 的存储库中进行一次即可。

此项目已采用 Microsoft 开源行为准则。有关更多信息,请参阅 行为准则常见问题解答 或联系 [email protected] 以提出任何额外的问题或评论。

商标

本项目可能包含项目、产品或服务的商标或标志。Microsoft 商标或标志的授权使用必须遵循并遵守 Microsoft 的商标及品牌指南。在修改后的本项目中使用 Microsoft 商标或标志不得引起混淆或暗示获得 Microsoft 的赞助。第三方商标或标志的使用须遵守第三方政策。

依赖项

~1.5MB
~39K SLoC