使用 GDB 调试 Rust

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

我知道 Stack Overflow 上的调试 Rust 问题,我之前也使用过 GDB 和 Go。但是,我遇到了一个问题,似乎 GDB 无法找到调试符号。

考虑

main.rs
中的这个复杂程序:

pub fn main () {
    println!("run");
}

我用调试符号编译它

rustc -g main.rs

然后我运行 GDB

gdb main

这给出了第一个线索,表明加载调试符号的东西不太正确。

GDB: can't open to read error

现在当我在 GDB 中输入

list

它给我留下了一些 C 代码,这不是我所期望的。

screenshot of gdb list showing C code

我做错了什么?我的 GDB 版本是 7.7,我在 OS X 10.9.2 (13C64) 上。我的 rustc 版本是 rustc 0.11.0-pre (3035d8dfb13077e195eb056568183911c90c1b4b 2014-07-02 21:26:40 +0000).

查看

gdb --configuration
的输出也可能有帮助:

这个 GDB 配置如下:
    配置 --host=x86_64-apple-darwin13.1.0 --target=x86_64-apple-darwin13.1.0
              --with-auto-load-dir=:${prefix}/share/auto-load
              --with-auto-load-safe-path=:${prefix}/share/auto-load
              --with-expat
              --with-gdb-datadir=/usr/local/share/gdb (可重定位)
              --with-jit-reader-dir=/usr/local/lib/gdb (可重定位)
              --without-libunwind-ia64
              --without-lzma
              --with-python=/System/Library/Frameworks/Python.framework/Versions/2.7
              --with-separate-debug-dir=/usr/local/lib/debug (可重定位)
              --with-zlib
              --without-babeltrace
debugging gdb rust
2个回答
13
投票

同样的问题,后来的 Rust 版本(1.0.0-beta),完全不同的答案:

在 GDB 中,当调试 Rust 可执行文件时,

break main
在一些作为 Rust 标准库一部分的设置代码中设置断点。这不是你想要的。

而是键入:

break $YOUR_CRATE::main
,用您的程序名称替换
$YOUR_CRATE
.


7
投票

好吧,我知道出了什么问题。我必须手动发出

main.o
文件。我以为
-g
参数会削减它。

现在我跑了

rustc -g main.rs --emit="obj,link"

我会跑

gdb main

一切都像魅力一样。

我为我的 bash 创建了两个别名以使事情变得简单:

alias rd='rustc -g --emit="obj,link"'

compile_and_run() {
     rustc -g --emit="obj,link" $1 && gdb ${1%.*}
}

alias rdr=compile_and_run

现在我只需调用

rdr main.rs
,它就会开始使用 gdb 进行调试
main.rs

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