我從來沒有使用調試器,現在已經到了讓他們嘗試的時候了。 MinGW似乎與我一直在嘗試使用的GDB一起。 Supposdly從命令行運行GDB並鍵入run myprog.exe
啓動調試器,但是當我這樣做,我得到如何在Windows上調試C程序?
啓動程序:C:\ MinGW的\ BIN \ MYPROG.EXE MYPROG.EXE [新主題1828.0xd8c] 錯誤開幕文件。 [下一個(過程1828)用代碼02退出]
如何繼續或者更簡單的方法是什麼?
特別是我想清除未定義的行爲。
我從來沒有使用調試器,現在已經到了讓他們嘗試的時候了。 MinGW似乎與我一直在嘗試使用的GDB一起。 Supposdly從命令行運行GDB並鍵入run myprog.exe
啓動調試器,但是當我這樣做,我得到如何在Windows上調試C程序?
啓動程序:C:\ MinGW的\ BIN \ MYPROG.EXE MYPROG.EXE [新主題1828.0xd8c] 錯誤開幕文件。 [下一個(過程1828)用代碼02退出]
如何繼續或者更簡單的方法是什麼?
特別是我想清除未定義的行爲。
那麼,最簡單的方法是使用IDE,實際上。你可能想試一試code::blocks - 使用非常簡單,在安裝時爲你配置所有東西(只要確保選擇一個編譯器 - 不用擔心,它會提示你),在那裏,你已經準備好了去。因爲它是多平臺的,所以它並沒有真正將你鎖定在窗口中,並且給你非常強大的圖形調試功能(以及更重要的是方便的)。
由於您的程序終止,您需要設置斷點來查看任何內容。在運行線之前嘗試break main
。然後可以執行命令行next
(下一行),step
(步進/跳出函數調用),print expression
(其中表達式可以是變量名稱或函數調用或計算),display expression
(與print相同,但是在每個提示之前打印)。在任何給定的點你可以輸入backtrace
來獲得一個調用堆棧。你甚至可以輸入up
和down
來調出callstack,所以你可以用打印更高的局部變量。
代替'break',使用'start'命令代替'run'。 – wallyk
通過二進制使用gdb
gdb <binary>
然後設置斷點主要
gdb) break main
然後在gdb運行您的程序
gdb) run
再突破點命中使用 'n' 或'next'步入不同的行
gdb) n
使用 'S' 爲步入功能和 'P' 打印VAR值
例子:
gdb) s <fun_name>
gdb) p x
我建議,作爲一個初學者使用Visual Studio開始。它有一個非常好的和易於使用的調試器。只需在想要開始調試的行中創建一箇中斷點(單擊行旁邊的左側欄或右鍵單擊並創建一箇中斷點)。一旦你設置了斷點,你就可以簡單地在調試模式下運行該程序,並且程序的執行將在創建斷點處暫停。
此時,您應該能夠查看有關程序執行的所有有價值的信息。您可以使用F10繼續執行步驟,或使用F11步進執行樹。
調試器的許多其他高級功能,如打破條件,命中計數等,但你可以從它的基本功能開始。
我建議初學者避免像瘟疫一樣的視覺工作室。這是我一生中見過的最糟糕的調試器和開發環境。文件不斷鎖定(windows的東西),項目文件是一個噩夢來管理,它會自動滑入和退出本機和其他模式,防止你擊中斷點,你需要有dll和pdb文件進行調試,核心文件分析是隻是破碎了,windows有一個容錯的堆來隱藏你的崩潰,使它看起來比實際更可靠,文檔是殘暴的,函數是專有的等等。 – Owl
我使用的是codeblock,根據這個YouTube視頻,我需要在使用調試器之前將文件添加到項目中。我有一個文件,但沒有項目,我如何將它添加到項目? http://www.youtube.com/watch?v=6CGH9Z19dS8 – Celeritas