Rust 调试:gnu gdb (VSCode) 问题

问题描述 投票:0回答:1

我正在 Windows 上使用 Visual Studio Code,我正在尝试调试一个非常非常简单的 Rust 程序,以学习如何正确使用 gnu gdb。问题当然不在程序上,我报告一下供参考:

fn main() {
    println!("Hello, world!");

    let a = 12;
    let b = 16;
    let c;

    c = sum_two_integers(a, b);
    println!("Sum returned: {}", c);

    println!("End of Rust program...");
}

fn sum_two_integers (a:i32, b:i32) -> i32 {
    let c;
    c = a + b;

    println!("Sum computed: {}", c);
    
    return c;
}

问题出在 gdb.exe 上:当我从 VSCode 或 cmd 行运行它时,它只能使用 F5/“继续”才能正常工作,随后跳转到断点。

但是,如果我在第一条主线中放置一个断点(

println!("Hello, world!");

),此时我使用 F11/“step”(“step-into”命令),它会弹出一个未找到的文件(这里是 VSCode 的打印):

vscode:gdb 搜索不存在的文件

出现这种情况是因为我单击了 F11/“步骤”而不是 F10/“下一步”,这对于新手来说可能是合乎逻辑的。但每当我对 C/C++ 程序使用相同的调试器时,它只会跳转到下一行。

所以问题是:有人遇到过同样的问题吗?有人知道 gdb 是否可以添加一些额外的命令来避免 Rust 程序出现此问题?
这不是一个非常非常大的问题,我可以继续断点,我可以处理它,但是每次区分 F10 和 F11 命令是相当烦人的。

感谢任何可以帮助我的人!

PS:如果我使用 rustup 设置 msvc 工具链并尝试使用 VSCode 和 msvc 进行调试,也会发生这种情况。同样的问题。如果您需要更多详细信息,请问我(我不想在这个问题上增加太多负担:))。为了完整起见,这些是我的工具链,我将 gnu 设置为默认值:

PS C:\SwDev\Sw\01_Attempts\C++\VSCode\VSCode_Rust_gdb_01> rustup toolchain list
stable-x86_64-pc-windows-gnu (default)
stable-x86_64-pc-windows-msvc
rust gdb rust-cargo vscode-debugger rustup
1个回答
0
投票

发生这种情况是因为在调试信息中,在编码 stdlib 时,编译器不是将路径放置到其源代码,而是放置相对于

/rustc/<rustc_version_hash>
的文件路径。

我不知道如何全局更改它,这确实很烦人,但是对于特定项目,您可以将此前缀映射到 stdlib 源代码的真实目录(您需要安装

rust-src
rustup 组件) .

保存您所面对的窗口显示的哈希值,并在调试配置中添加以下属性:

对于 MSVC,我相信还有 gdb:

"sourceFileMap": {
    "/rustc/<your_hash>": "<your_home>/.rustup/toolchains/<project_toolchain>/lib/rustlib/src/rust"
}

对于 LLDB:

"sourceMap": {
    "/rustc/<your_hash>": "<your_home>/.rustup/toolchains/<project_toolchain>/lib/rustlib/src/rust"
}

还有一个设置

rust-analyzer.debug.sourceFileMap
应该对 rust-analyzer 的调试镜头执行相同的操作,但我无法让它工作。

© www.soinside.com 2019 - 2024. All rights reserved.