簡體   English   中英

如何在Windows上調試一個C的程序?

[英]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來獲取調用堆棧。 您甚至可以updown鍵入以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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM