当多个 Rust 源文件共享相同名称时,我可以设置 LLDB 断点吗?

2024-03-11

背景:在 Rust 中,您通常有多个名为mod.rs。例如:

app_name
  src
    main.rs
    foo
      mod.rs
    bar
      mod.rs

Problem:我找不到区分的方法mod.rs设置 LLDB 断点时来自另一个:

$ cargo build
$ rust-lldb target/debug/app_name

(lldb) breakpoint set -f mod.rs -l 10
Breakpoint 1: 2 locations.

(lldb) breakpoint set -f foo/mod.rs -l 10
Breakpoint 2: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.

(lldb) breakpoint set -f src/foo/mod.rs -l 10
Breakpoint 3: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.

此问题最常见于mod.rs。更一般地说,只要多个源文件共享相同的名称,就会出现这种情况。

Question: 有没有办法在第10行设置断点foo/mod.rs但不在第 10 行bar/mod.rs?


您可以使用绝对路径到文件。就我而言,我编译在/tmpOS X 上的目录,实际上是/private/tmp。这意味着我可以做这样的事情:

breakpoint set --file /private/tmp/debug/src/bar/mod.rs --line 2

我通过查看 DWARF 调试信息发现了这一点:

dwarfdump target/debug/debug.dSYM/Contents/Resources/DWARF/debug | grep mod.rs

如果这不起作用,还有一些解决方法:

  1. 相反,在函数处中断:breakpoint set --name my_func。您不太可能具有相同的方法名称,但在这里您也可以使用模块名称:breakpoint set --name foo::my_func.

  2. 禁用无意义的重复断点。breakpoint set建立一个logical带有数字 ID 的断点(例如1),然后与条件匹配的真正断点有一个子 ID(例如1.1)。你可以看到这些breakpoint list然后禁用其他人breakpoint disable 1.1.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当多个 Rust 源文件共享相同名称时,我可以设置 LLDB 断点吗? 的相关文章

随机推荐