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

时间:2015-11-06 15:22:00

标签: debugging gdb rust

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

1 个答案:

答案 0 :(得分: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 only的下载包(没有GCC或其他您不需要的工具)。特殊键仅适用于Windows终端。推荐用于Eclipse / RustDT的GDB。
  • 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的Linux(和Mac OS?)发行版中,而不包含在Windows(Issue reported)中。但它们可以在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中使用GDB和RustDT"

现在,需要配置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

但是将$RUST_GDB_ETC替换为etc目录与Python文件的位置,例如D:/devel/tools.Rust/rust/bin/rustlib/etc。请注意,即使它是Windows路径,也要确保使用正斜杠(' /')作为路径分隔符,以避免该字符串文字中出现转义问题。

要验证这是否有效,请启动gdb。如果你看到" ----加载Rust漂亮的打印机----"在提示之前的消息并且没有Python错误之后,事情应该正常工作。要确认,请键入命令info pretty-printer。应该有一行" rust_pretty_printer_lookup_function"如果漂亮的打印机成功加载,则在输出中。

在Eclipse中使用带有RustDT的GDB

如果您之前成功完成了这些步骤,那么您可以从RustDT中使用GDB。只是一些细节:

  • 如果使用TDM GDB,要启动的GDB可执行文件必须是$TDM_ROOT/gdb64/bin/gdb.exe处的可执行文件,而不是$TDM_ROOT/bin/gdb.exe$TDM_ROOT/bin/gdb64.exe处的可执行文件,因为最后两个是包装器对于正确的可执行文件,当RustDT / CDT启动GDB过程时,它们无法正常工作。

  • 如果使用RustDT 0.4.1或更高版本,只要RustDT在${RUST_ROOT}/lib/rustlib/etc中找到它们,就会自动配置漂亮的打印机。您可以通过启动调试启动来验证这是否有效,打开相应的" gdb跟踪"控制台视图中的控制台页面,并搜索字符串"为Windows注册Rust漂亮打印机": RustDT GDB debug traces

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

RustDT debug launch configuration