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

