摘 VS2005除錯技巧集合

2021-04-13 13:35:28 字數 1820 閱讀 7303

vs2005除錯技巧集合

下面有從淺入深的6個問題,您可以嘗試回答一下

乙個如下的語句for (int i = 0; i < 10; i++),什麼都寫在一行,你怎麼在j=5前面插入斷點

在乙個1000次的迴圈體內部設定斷點,你希望當迴圈進行到900次後中斷,怎麼才能做到呢?

你有乙個表示式在上面迴圈的某一次發生了變化,你想知道是哪一次,在哪個地方,怎麼才能做到?

你希望你的斷點在被命中100次後,每命中三次中斷一次,比如第103,第106,第109怎樣做?

你有在除錯乙個服務程式,希望在其內部打上了斷點,可是,由於這是乙個公用的服務你不希望其他訪問這個服務的程式被你的除錯所干擾,你想怎麼辦?

怎樣知道2個斷點中斷的時間間隔

問題1,2

這兩個問題最簡單,我在乙個例子裡說明

例如如下迴圈

for(int i=0;i<1000;i++)

在迴圈的大括號上單擊右鍵,插入斷點,用這個方法,可以對付那些喜歡把語句寫在一行上的傢伙,其實,隨著.net3.5中linq的出現,我們肯定也會經常在在一行上寫複雜的表示式,這個時候用這種插入方法會比較管用

ok,現在我們來編輯這個斷點的條件,在斷點上右鍵單擊,選擇如圖選單項

在彈出的視窗中可以設定斷點命中的條件i==900

注意我是在除錯c#**,預設的條件語句語法是c#,如果你想切換,那就需要用ctrl-b,來插入斷點,並在彈出視窗中選擇語言

通過這樣設定條件斷點,我們就可以解決我們的問題1,2了

問題3

同樣通過設定條件斷點我們還可以解決我們的問題3,對表示式變化的跟蹤

string user="yizhu2000"

for(int i=0;i<10000;i++)括起來,,其他的部分會被作為字串輸出。設定whenhit後斷點變成了方形(看厭了圓斷點,我還挺喜歡這個方傢伙的)

在output中檢視輸出結果,如下:

既然可以計算表示式,我們的第乙個最簡方案就出來了,也就是在程式執行到斷點的時候,輸出datetime.now,這樣當然是可行的,但是我們需 要的是時間間隔,所以我們還需要自己來算個減法,還是挺麻煩的,怎麼樣才能讓程式自己輸出時間間隔呢?有乙個想法是這樣的,我們在上乙個斷點宣告乙個時間 變數,然後在下面的斷點裡用datatime.now減去這個變數,即

斷點一的條件:

斷點二的條件:

看起來不錯,但是實際執行時就有問題了,讓我們看看輸出吧

上面高亮的部分說,變數申明只能在immediate window中進行,所以斷點一的變數沒有申明成功,關於immediatewindow,我們以後會涉獵到,反正就是說想在表示式裡申明變數,沒門,死路一條.那麼我們怎麼才能不申明變數又時間點呢?

這時我想起了thread.setdata 方法,這個方法可以往當前執行緒專門提供的空間中插入一些資料,並且可以通過getdata得到資料,具體細節參考

於是方案就有了,在第乙個斷點處把時間放入thread的dataslot,然後第二個斷點取出來相減

斷點一的條件:

斷點二的條件:

看看輸出效果

我們的目的已經達到了,output中成功的輸出了時間間隔,當然,還不是很完善,首先,這個方法限於兩個斷點,你想多打幾個斷點,測試兩兩間的間隔還是比較麻煩.測量精度也可以提高,大家有興趣可以自己研究這個方法的擴充套件

VS2005除錯技巧集合

下面有從淺入深的6個問題,您可以嘗試回答一下 乙個如下的語句for int i 0 i 10 i 什麼都寫在一行,你怎麼在j 5前面插入斷點 在乙個1000次的迴圈體內部設定斷點,你希望當迴圈進行到900次後中斷,怎麼才能做到呢?你有乙個表示式在上面迴圈的某一次發生了變化,你想知道是哪一次,在哪個地...

vs2005除錯技巧 基礎

下面有從淺入深的6個問題,您可以嘗試回答一下.1.乙個如下的語句for int i 0 i 10 i 什麼都寫在一行,你怎麼在j 5前面插入斷點.2.在乙個1000次的迴圈體內部設定斷點,你希望當迴圈進行到900次後中斷,怎麼才能做到呢?3.你有乙個表示式在上面迴圈的某一次發生了變化,你想知道是哪一...

vs2005遠端除錯

vs2005遠端除錯不象vc6那麼簡單,已經做了修改,你需要轉換,以前我也是覺得vc6方便,但用習慣了vs2005遠端除錯反而覺得vs2005方便。vs2005遠端除錯方法如下 除錯前提,被除錯機器上有運程偵錯程式程式,這個程式可以從vs2005的安裝目錄下拷貝 拷貝乙個資料夾就可以了.然後執行這個...