簡體   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