1,斷點設(shè)置有技巧:
1)設(shè)置條件斷點,比如i==10,變量改變時斷點;
2)如何讓斷點在指定的命中次數(shù)或者大于某個次數(shù)時觸發(fā)呢?方法是設(shè)定幾個斷點的HitCount,右鍵單擊斷點,在彈出菜單中選擇Hit Count;
3)When Hit,這個選項可以讓我們在命中斷點后做一些事情,包括輸出一些內(nèi)容,或者調(diào)用宏,比如輸出一個程序中變量的值;
4)利用斷點的Filter功能,比如我希望斷點只有被機器名為yizhu的機器訪問才能觸發(fā);
具體參見:一篇介紹VS2005調(diào)試斷點技巧的文章
2. 怎樣判斷加載的dll的正確性?
調(diào)試時,打開Debug->Window->Modules,在窗口中顯示的就是當(dāng)前進程加載的所有dll及其詳細信息,如果
斷點無法擊中,可以檢查這里,看是否有匹配的pdb文件或者是加載了錯誤的dll
3. 已經(jīng)開始調(diào)試的工程加入另外的進程并且調(diào)試
如果你在調(diào)試客戶端,但是服務(wù)器需要調(diào)試,那么使用菜單中的Tools-> Attach to process進行進程掛接,這種方法可以掛接所有windows下的程序,能否調(diào)試,就看其是否調(diào)試版和有調(diào)試用的PDB文件
4. 同時啟動多進程進行調(diào)試
在Solution的屬性中的Common Properties->Startup Project。選擇Multiple startup projects。這個選項是可以記憶的,下次打開可以直接調(diào)試,非常方便
5.調(diào)試Windows Service
MSDN推薦的方法
1、調(diào)試windows服務(wù)的初始化、啟動
另寫一個程序控制服務(wù)的初始化和啟動
注意:OnStart里寫Log, OnStart里要在30秒返回. 不然啟動就失敗了! 所以O(shè)nStart里不要放太多代碼! 可以用異步或線程.
2、調(diào)試windows服務(wù)的其他方面
1 ) 安裝您的服務(wù) : intallutils xx.exe
2) 可從“服務(wù)控制管理器”、“服務(wù)器資源管理器”或代碼啟動服務(wù)
3) vs: 設(shè)置相關(guān)斷點,啟動調(diào)試,再在工具欄中選擇 調(diào)試->附加到進程..., 選擇您的服務(wù), 確定。
3、trace方法
1)添加調(diào)試方法
private static void DebugRun(string[] args)
2)改寫程序入口為如下:
public static void Main(string[] args)
{
#if DEBUG
DebugRun(args);
#else
/*
初始化服務(wù)
*/
#endif
}
3)加入2種調(diào)試代碼
EventLog.WriteEntry("...");
System.Diagnostics.Debug.WriteLine("...");
6,遠程調(diào)試技術(shù)
顧名思義,就是要調(diào)試的程序和調(diào)試器本身并不在一臺機器上。由于虛擬機技術(shù)的盛行,在虛擬機里面運行待調(diào)試的程序,而在外面運行調(diào)試器,也是一種比較流行的做法。
1 為什么使用遠程調(diào)試
遠程調(diào)試有如下好處:
a. 能讓產(chǎn)品運行在一個比較干凈的環(huán)境。有的時候如果產(chǎn)品安裝在一個裝好集成環(huán)境的機器上,某些bug并不能顯示出來。
b. 易于部署調(diào)試環(huán)境。很多產(chǎn)品都非常復(fù)雜,比如很多都以service方式運行或者要load很復(fù)雜的resource,想在調(diào)試器里面直接按F5運行,越來越難。
c. 對于游戲等全屏方式運行的程序,尤其有用。以前我對調(diào)試directx程序非常頭疼。
2 怎樣使用遠程調(diào)試
使用vs2005進行遠程調(diào)試,詳細的介紹參考:http://support.microsoft.com/kb/910448
簡單的來說,
1)在被調(diào)試的機器上面運行Msvsmon.exe
2)在調(diào)試機器上面運行vs2005,并attach到遠程機器的某個進程
3 注意事項
a. 設(shè)置好正確的權(quán)限
被調(diào)試機器和調(diào)試機器需要互相信任的權(quán)限(two-way)。如果兩臺機器在同一個workgroup,讓兩臺機器擁有一個相同的賬號和密碼,然后以這個賬號運行。如果兩臺機器在一個域里面,比較簡單,Msvsmon可以設(shè)置權(quán)限。如果一臺機器在domain里面,另外一臺不在,同樣是讓兩臺機器擁有一個相同的賬號和密碼,然后以這個賬號運行。
對于Windows XP要特別注意一下,設(shè)置匿名的訪問權(quán)限才可以work , http://support.microsoft.com/kb/908099
b.設(shè)置好symbol
什么,你不知道什么是symbol?簡單的來說,symbol file(*.pdb) is for source-level debugging. VS2005就是靠它來調(diào)試exe的。默認情況下debug版本生成的,而release版本不生成pdb.設(shè)置好 [Project proerties]-[C/C++]-[Debug Information Format]-Program Database就可以了。
為了減少symbol方面的麻煩,最簡單的做法是讓被調(diào)試機器上的binary版本和本地compile出來保持一致。