繁体   English   中英

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

[英]How to set up GDB for debugging Rust programs in Windows?

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

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

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

要验证这是否有效,请启动gdb。 如果你在提示之前看到“----加载Rust pretty-printers ----”消息并且之后没有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找到它们,就会自动配置漂亮的打印机。 您可以通过启动调试启动,在Console视图中打开相应的“gdb traces”控制台页面,并搜索字符串“Registering Rust pretty-printers for Windows”来验证这一点: RustDT GDB调试跟踪

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

RustDT调试启动配置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM