[英]How to set up GDB for debugging Rust programs in Windows?
如何配置GDB以在Windows中調試Rust程序,包括設置Rust pretty-printers,以及在IDE或命令行中進行調試?
首先,您需要使用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
但是將$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”。
如果您之前成功完成了這些步驟,那么您可以從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”來驗證這一點:
對於0.4.1之前的RustDT版本,為了啟用漂亮的打印機,您需要配置啟動配置以運行剛剛在上一節中修改過的gdbinit文件。 當RustDT / CDT啟動GDB時,不會執行默認的gdbinit,只會在配置中指定。 因此,將.gdbinit
的“GDB命令文件”字段.gdbinit
為,例如D:\\devel\\tools\\TDM-GDB\\gdb64\\bin\\gdbinit
:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.