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)
同样的问题,更高的Rust版本(1.0.0-beta),完全不同的答案:
在GDB中,调试Rust可执行文件时,请break main
在Rust标准库中的某些设置代码中设置断点。这不是你想要的。
而是输入:break $YOUR_CRATE::main
,用您的程序名称代替$YOUR_CRATE
。
好的,我找出了问题所在。我必须手动发出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进行调试。
归档时间: |
|
查看次数: |
5859 次 |
最近记录: |