[英]How do you debug a C program on Windows?
我從未使用過調試器,是時候嘗試一下了。 MinGW 似乎附帶了我一直在嘗試使用的 GDB。 Supposdly 從命令行運行 gdb 並鍵入run myprog.exe
啟動調試器但是當我這樣做時我得到
啟動程序:C:\MinGW\bin\myprog.exe MyProg.exe [新線程 1828.0xd8c] 打開文件時出錯。 [下級 1(進程 1828)退出,代碼為 02]
如何進行或更簡單的方法是什么?
特別是我試圖清除未定義的行為。
由於程序終止,您需要設置斷點才能看到任何內容。 在運行線之前嘗試break main
。 然后你可以執行命令行next
(next line), step
(step into / outof function calls), print expression
(其中expression可以是變量名或函數調用或計算), display expression
(與print相同,但是在每個提示之前打印)。 在任何給定點,您都可以鍵入backtrace
來獲取調用堆棧。 您甚至可以up
和down
鍵入以up
移動callstack,以便您可以打印更高的局部變量。
實際上,最簡單的方法是使用IDE。 您可能想嘗試使用code :: blocks - 非常容易使用,在安裝時為您配置一切(只需確保選擇一個編譯器 - 不要擔心,它會提示您)在那里,你們都是准備好了。 由於它是多平台的,它也不能真正鎖定你的窗口,並為你提供非常強大的(並且我認為更重要的是,方便的)圖形調試的可能性。
用gdb傳遞二進制文件
gdb <binary>
然后將斷點設置為main
gdb) break main
然后在gdb中運行您的程序
gdb) run
然后斷點點擊使用'n'或'next'步進到不同的行
gdb) n
使用's'進入功能,'p'打印var值
示例:
gdb) s <fun_name>
gdb) p x
我建議,作為初學者開始使用Visual Studio。 它有一個非常好用且易於使用的調試器。 只需在要開始調試的行中創建一個斷點(單擊該行旁邊的左側欄或右鍵單擊並創建一個斷點)。 設置斷點后,只需在調試模式下運行程序,程序的執行就會在創建中斷點時停止。
此時,您應該能夠查看有關程序執行的所有有價值信息。 您可以使用F10繼續執行步驟,或使用F11繼續執行樹。
調試器和許多其他高級功能一樣,例如打破條件,命中計數等,但您可以從它的基本功能開始。
如果我編譯這樣的程序:
gcc -o my-prog -g myprog.c
然后我可以像這樣調試可執行文件my-prog
:
gdb my-prog
-g
選項告訴gcc
生成完整的調試信息。 其他編譯器將有自己的此選項版本(例如 MSVC cl
命令有/Zi
選項)。
由於您在程序上運行gdb
時遇到問題,因此可能值得檢查它是否首先使用調試信息進行編譯。 調試信息通常在您編譯程序的位置生成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.