C 中使用斷點寫除錯方法

2021-06-23 06:50:17 字數 1432 閱讀 9180

c/c++ code:

f9 —— 設定/取消斷點

f10 —— 單步執行

f11 —— 比f10的步幅小

f10在函式的呼叫時,直接跳過,在f11下,會進入函式體! 

f5 —— 執行到下乙個斷點!

了解除錯,首先要知道"斷點"這個概念。斷點就是程式執行中可能會中斷的地方,方便開發者在程式執行的過程中檢視

程式當前的執行狀態,比如變數的值,函式的返回值等等。究竟怎麼使用斷點呢?

1.f9在當前游標所在的行下斷點,如果當前行已經有斷點,則取消斷點。

f5除錯狀態執行程式,程式執行到有斷點的地方會停下來。

f10單步執行程式。

ctrl+f10執行到游標所在行。

f11和f10的區別是,如果當前執行語句是函式呼叫,則會進入函式裡面。

shift+f11跳出當前所在函式。

特別說明:

a.有的地方不能下斷點。比如空行,基本型別定義語句(不初始化),等等非執行語句。比如

int i; // 此行不能下斷點

int j=0;// 這裡可以下

cstring str;// 這裡可以下

intk = max(i,j);// 這裡可以下

b.不是所有斷點都會(斷)。比如下斷點的語句在程式裡面沒有被執行。

c.此外,alt+f9還可以下條件斷點,不過這個不常用,有興趣的可以自己研究

2.如何除錯release版的程式?

有些程式在debug下執行的很好,但在release下卻總是失敗,預設情況下release是不能除錯的。 怎麼解決呢?

其實"debug"和"release"都只是乙個代號而已,各自對應一組不同的編譯選項。

在release的預設設定下,alt+f7 ,調出工程設定對話方塊,切換到link選項卡,勾選"generate debug info",然後再切換

到c/c++選項卡,在"optimizations"裡面選"disable(debug)",在下面的"debug info"裡面選"program database for edit

and continue".然後點ok儲存設定,重新編譯程式,下斷點即可。

3.上面兩點已經能應付很多種情況了,但是有時候即使在debug下也不能下斷點,我以前也曾經遇到過這種問題,乙個

調了層的dll,就是不能下斷點。其實還除了上面的方法,還有一種最底層的實現技術:使用彙編。

細心的人可能會發現,有時候在除錯狀態下當程式出現異常的時候,游標會指向彙編**,而這個**就是int 3,這其

實是乙個中斷。

在你的**的任意地方加上

__asm

;用debug編譯,然後直接執行程式。當程式執行到上述**的時候,就會出現乙個框,告訴你說一大堆資訊,說程式錯

了,下面有"除錯"、"終止"、"忽略",不用理,點除錯就可以進入跟蹤了。

在OD中使用條件斷點進行除錯

最近在逆向hr防毒軟體,感覺壓力很大,但是還好有前人已經幫助我們探過路了,並且也有大佬分享了一些經驗,讓我們逆向分析起來可以不用踩那麼多坑,這裡我就簡單的是記錄下我在逆向過程中,發現自己的一些問題,幫助自己成長。在od使用過程中,為了能夠快速斷在指定解密 處,我就在讀寫檔案處下斷,再逐步跟call,...

使用VS Code斷點除錯PHP

vs code 使用一款傑出的輕量級 編輯器,其中的外掛程式工具不勝列舉而且還在不斷增加。使用 vs code 除錯 php 更是方便簡潔,下面我們來一起看一下。在 php.ini 配置檔案中加一行zend extension path to xdebug,其中path to xdebug即 xde...

使用VS Code斷點除錯PHP

vs code 使用一款傑出的輕量級 編輯器,其中的外掛程式工具不勝列舉而且還在不斷增加。使用 vs code 除錯 php 更是方便簡潔,下面我們來一起看一下。在 php.ini 配置檔案中加一行zend extension path to xdebug,其中path to xdebug即 xde...