使用gdb调试Rust

Chr*_*oph 10 debugging gdb rust

我知道在StackOverflow上调试Rust问题,我之前也使用了gdb.但是,我遇到了一个问题,似乎gdb无法找到调试符号.

考虑一下这个复杂的程序main.rs

pub fn main () {
    println!("run");
}
Run Code Online (Sandbox Code Playgroud)

我用调试符号编译它

rustc -g main.rs
Run Code Online (Sandbox Code Playgroud)

然后我运行gdb

gdb main
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

现在,当我在gdb和键入

list
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

我究竟做错了什么?我的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 --configuration
This GDB was configured as follows:
   configure --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 (relocatable)
             --with-jit-reader-dir=/usr/local/lib/gdb (relocatable)
             --without-libunwind-ia64
             --without-lzma
             --with-python=/System/Library/Frameworks/Python.framework/Versions/2.7
             --with-separate-debug-dir=/usr/local/lib/debug (relocatable)
             --with-zlib
             --without-babeltrace
Run Code Online (Sandbox Code Playgroud)

Jas*_*rff 8

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

在GDB中,调试Rust可执行文件时,请break main在Rust标准库中的某些设置代码中设置断点。这不是你想要的。

而是输入:break $YOUR_CRATE::main,用您的程序名称代替$YOUR_CRATE


Chr*_*oph 5

好的,我找出了问题所在。我必须手动发出main.o文件。我以为-g参数会减少它。

现在我跑步

rustc -g main.rs --emit="obj,link"
Run Code Online (Sandbox Code Playgroud)

我可以跑

gdb main
Run Code Online (Sandbox Code Playgroud)

一切都像一个咒语。

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

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

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

alias rdr=compile_and_run
Run Code Online (Sandbox Code Playgroud)

现在我可以打电话了rdr main.rs,它将开始main.rs使用gdb进行调试。