Bru*_*ros 17 debugging gdb rust
如何配置GDB以在Windows中调试Rust程序,包括设置Rust pretty-printers,以及在IDE或命令行中进行调试?
Bru*_*ros 24
首先,您需要使用Windows GNU ABI Rust安装来编译程序.MSVC ABI使用与GDB理解的不同的调试格式,因此不起作用.MSVC ABI编译的程序必须使用Visual Studio(或将来可能的LLDB)进行调试.
第二步是获取GDB本身.建议的选择是从TDM-GCC或mingw-w64获取它:
Rust为GDB提供了一些扩展,以便更好地显示某些Rust本机类型,例如枚举,切片和向量.使用漂亮的打印机,这种类型的变量将以结构化方式显示,而不是低级表示.有关详细信息,请参阅https://michaelwoerister.github.io/2015/03/27/rust-xxdb.html.
漂亮的打印机只包含在Rust(而不是Windows)的Linux(和Mac OS?)发行版中(问题报道).但它们可以在Windows中运行.
下载Linux Rust存档(https://www.rust-lang.org/downloads.html),解压缩并找到rustc/lib/rustlib/etc里面的目录.现在将etc文件夹复制到$RUST/bin/rustlib,其中$ RUST是Rust安装的位置.那里的Python脚本将位于$RUST/bin/rustlib/etc.
如果您只打算在RustDT中使用GDB,并且具有RustDT 0.4.1或更高版本,则可以跳到下一节:"在Eclipse中使用带有RustDT的GDB".
现在,需要配置GDB来加载这些脚本.找到GDB安装的gdbinit文件(对于TDM-GCC,应该是gdb64\bin\gdbinit,对于mingw-w64 :) mingw64\etc\gdbinit.现在将以下文本添加到文件的末尾:
python
print "---- Loading Rust pretty-printers ----"
sys.path.insert(0, "$RUST_GDB_ETC")
import gdb_rust_pretty_printing
gdb_rust_pretty_printing.register_printers(gdb)
end
Run Code Online (Sandbox Code Playgroud)
但是,例如,用Python文件替换目录$RUST_GDB_ETC的位置.请注意,即使它是Windows路径,也要确保使用正斜杠('/')作为路径分隔符,以避免该字符串文字中的转义问题.etcD:/devel/tools.Rust/rust/bin/rustlib/etc
要验证这是否有效,请启动gdb.如果你在提示之前看到"----加载Rust pretty-printers ----"消息并且之后没有Python错误,那么事情应该正常.要确认,请键入命令info pretty-printer.如果漂亮的打印机成功加载,输出中应该有一行"rust_pretty_printer_lookup_function".
如果您之前成功完成了这些步骤,那么您可以从RustDT中使用GDB.只是一些细节:
如果使用TDM GDB,要启动的GDB可执行文件必须是at $TDM_ROOT/gdb64/bin/gdb.exe,而不是at $TDM_ROOT/bin/gdb.exe或者$TDM_ROOT/bin/gdb64.exe,因为最后两个是正确可执行文件的包装器,并且当RustDT/CDT启动GDB进程时它们无法正常工作.
如果使用RustDT 0.4.1或更高版本,只要RustDT找到它们,就会自动配置漂亮的打印机${RUST_ROOT}/lib/rustlib/etc.您可以通过启动调试启动,在Console视图中打开相应的"gdb traces"控制台页面,并搜索字符串"Registering Rust pretty-printers for Windows"来验证这一点:

对于0.4.1之前的RustDT版本,为了启用漂亮的打印机,您需要配置启动配置以运行刚刚在上一节中修改过的gdbinit文件.当RustDT/CDT启动GDB时,不会执行默认的gdbinit,只会在配置中指定.因此,将"GDB命令文件"字段更改.gdbinit为,例如D:\devel\tools\TDM-GDB\gdb64\bin\gdbinit: