如何在Windows中设置GDB以调试Rust程序?

Bru*_*ros 17 debugging gdb rust

如何配置GDB以在Windows中调试Rust程序,包括设置Rust pretty-printers,以及在IDE或命令行中进行调试?

Bru*_*ros 24

Rust安装

首先,您需要使用Windows GNU ABI Rust安装来编译程序.MSVC ABI使用与GDB理解的不同的调试格式,因此不起作用.MSVC ABI编译的程序必须使用Visual Studio(或将来可能的LLDB)进行调试.

GDB

第二步是获取GDB本身.建议的选择是从TDM-GCC或mingw-w64获取它:

  • TDM-GCC(http://tdm-gcc.tdragon.net/):提供带GDB的下载包(没有GCC或其他您不需要的工具).特殊键仅适用于Windows终端.推荐的GDB与Eclipse/RustDT一起使用.
  • Mingw-w64(http://mingw-w64.org/):特殊键仅适用于Windows终端.最近的版本似乎有一个错误:其中包含空格的命令行参数被错误地解析.
  • Cygwin:不推荐.特殊键可在Windows终端和bash终端中使用.路径必须以Cygwin格式指定,这似乎打破了一些事情.使用Eclipse/RustDT无法正常工作.

启用漂亮的打印机

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".

在Eclipse中使用带有RustDT的GDB

如果您之前成功完成了这些步骤,那么您可以从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"来验证这一点: RustDT GDB调试跟踪

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

RustDT调试启动配置