C/C++ code:
f9 --- 設(shè)置/取消斷點(diǎn)
f10 --- 單步執(zhí)行
f11 --- 比f10的步幅小,f10在函數(shù)的調(diào)用時,直接跳過,在f11下,會進(jìn)入函數(shù)體!
f5 --- 執(zhí)行到下一個斷點(diǎn)!
了解調(diào)試,首先要知道"斷點(diǎn)"這個概念.斷點(diǎn)就是程序運(yùn)行中可能會中斷的地方,方便開發(fā)者在程序運(yùn)行的過程中查看程序當(dāng)前的運(yùn)行狀態(tài),比如變量的值,函數(shù)的返回值等等.究竟怎么使用斷點(diǎn)呢?
1.F9在當(dāng)前光標(biāo)所在的行下斷點(diǎn),如果當(dāng)前行已經(jīng)有斷點(diǎn),則取消斷點(diǎn).
F5調(diào)試狀態(tài)運(yùn)行程序,程序執(zhí)行到有斷點(diǎn)的地方會停下來.
F10單步執(zhí)行程序.
CTRL+F10運(yùn)行到光標(biāo)所在行.
F11和F10的區(qū)別是,如果當(dāng)前執(zhí)行語句是函數(shù)調(diào)用,則會進(jìn)入函數(shù)里面.
SHIFT+F11跳出當(dāng)前所在函數(shù).
特別說明:
a.有的地方不能下斷點(diǎn).比如空行,基本類型定義語句(不初始化),等等非執(zhí)行語句.比如
int i; // 此行不能下斷點(diǎn)
int j=0;// 這里可以下
CStringstr;// 這里可以下
intk = Max(i,j);// 這里可以下
b.不是所有斷點(diǎn)都會(斷).比如下斷點(diǎn)的語句在程序里面沒有被執(zhí)行.
c.此外,ALT+F9還可以下條件斷點(diǎn),不過這個不常用,有興趣的可以自己研究:)
2.如何調(diào)試Release版的程序?
有些程序在debug下運(yùn)行的很好,但在release下卻總是失敗,默認(rèn)情況下release是不能調(diào)試的. 怎么解決呢?
其實(shí)"debug"和"release"都只是一個代號而已,各自對應(yīng)一組不同的編譯選項(xiàng).
在release的默認(rèn)設(shè)置下,ALT+F7 ,調(diào)出工程設(shè)置對話框,切換到link選項(xiàng)卡,勾選"Generate debug info",然后再切換到C/C++選項(xiàng)卡,在"Optimizations"里面選"Disable(Debug)",在下面的"Debug info"里面選"Program Database for Edit and Continue".然后點(diǎn)OK保存設(shè)置,重新編譯程序,下斷點(diǎn)即可.
3.上面兩點(diǎn)已經(jīng)能應(yīng)付很多種情況了,但是有時候即使在debug下也不能下斷點(diǎn),我以前也曾經(jīng)遇到過這種問題,一個調(diào)了層的dll,就是不能下斷點(diǎn).其實(shí)還除了上面的方法,還有一種最底層的實(shí)現(xiàn)技術(shù):使用匯編.
細(xì)心的人可能會發(fā)現(xiàn),有時候在調(diào)試狀態(tài)下當(dāng)程序出現(xiàn)異常的時候,光標(biāo)會指向匯編代碼,而這個代碼就是int 3,這其實(shí)是一個中斷.
在你的代碼的任意地方加上
__asm
{
int 3
};
用debug編譯,然后直接運(yùn)行程序.當(dāng)程序執(zhí)行到上述代碼的時候,就會出現(xiàn)一個框,告訴你說一大堆信息,說程序錯了,下面有"調(diào)試"、"終止"、"忽略",不用理,點(diǎn)調(diào)試就可以進(jìn)入跟蹤了。
f9 --- 設(shè)置/取消斷點(diǎn)
f10 --- 單步執(zhí)行
f11 --- 比f10的步幅小,f10在函數(shù)的調(diào)用時,直接跳過,在f11下,會進(jìn)入函數(shù)體!
f5 --- 執(zhí)行到下一個斷點(diǎn)!
了解調(diào)試,首先要知道"斷點(diǎn)"這個概念.斷點(diǎn)就是程序運(yùn)行中可能會中斷的地方,方便開發(fā)者在程序運(yùn)行的過程中查看程序當(dāng)前的運(yùn)行狀態(tài),比如變量的值,函數(shù)的返回值等等.究竟怎么使用斷點(diǎn)呢?
1.F9在當(dāng)前光標(biāo)所在的行下斷點(diǎn),如果當(dāng)前行已經(jīng)有斷點(diǎn),則取消斷點(diǎn).
F5調(diào)試狀態(tài)運(yùn)行程序,程序執(zhí)行到有斷點(diǎn)的地方會停下來.
F10單步執(zhí)行程序.
CTRL+F10運(yùn)行到光標(biāo)所在行.
F11和F10的區(qū)別是,如果當(dāng)前執(zhí)行語句是函數(shù)調(diào)用,則會進(jìn)入函數(shù)里面.
SHIFT+F11跳出當(dāng)前所在函數(shù).
特別說明:
a.有的地方不能下斷點(diǎn).比如空行,基本類型定義語句(不初始化),等等非執(zhí)行語句.比如
int i; // 此行不能下斷點(diǎn)
int j=0;// 這里可以下
CStringstr;// 這里可以下
intk = Max(i,j);// 這里可以下
b.不是所有斷點(diǎn)都會(斷).比如下斷點(diǎn)的語句在程序里面沒有被執(zhí)行.
c.此外,ALT+F9還可以下條件斷點(diǎn),不過這個不常用,有興趣的可以自己研究:)
2.如何調(diào)試Release版的程序?
有些程序在debug下運(yùn)行的很好,但在release下卻總是失敗,默認(rèn)情況下release是不能調(diào)試的. 怎么解決呢?
其實(shí)"debug"和"release"都只是一個代號而已,各自對應(yīng)一組不同的編譯選項(xiàng).
在release的默認(rèn)設(shè)置下,ALT+F7 ,調(diào)出工程設(shè)置對話框,切換到link選項(xiàng)卡,勾選"Generate debug info",然后再切換到C/C++選項(xiàng)卡,在"Optimizations"里面選"Disable(Debug)",在下面的"Debug info"里面選"Program Database for Edit and Continue".然后點(diǎn)OK保存設(shè)置,重新編譯程序,下斷點(diǎn)即可.
3.上面兩點(diǎn)已經(jīng)能應(yīng)付很多種情況了,但是有時候即使在debug下也不能下斷點(diǎn),我以前也曾經(jīng)遇到過這種問題,一個調(diào)了層的dll,就是不能下斷點(diǎn).其實(shí)還除了上面的方法,還有一種最底層的實(shí)現(xiàn)技術(shù):使用匯編.
細(xì)心的人可能會發(fā)現(xiàn),有時候在調(diào)試狀態(tài)下當(dāng)程序出現(xiàn)異常的時候,光標(biāo)會指向匯編代碼,而這個代碼就是int 3,這其實(shí)是一個中斷.
在你的代碼的任意地方加上
__asm
{
int 3
};
用debug編譯,然后直接運(yùn)行程序.當(dāng)程序執(zhí)行到上述代碼的時候,就會出現(xiàn)一個框,告訴你說一大堆信息,說程序錯了,下面有"調(diào)試"、"終止"、"忽略",不用理,點(diǎn)調(diào)試就可以進(jìn)入跟蹤了。