用VS除錯asp

epluguo發表於2013-09-02

所謂的動態除錯(跟蹤)是指,讓程式一步一步的執行,我們可以隨時隨地的關注程式的執行狀態。中斷的意思就是讓程式先別急著往下執行,等我檢視完了,給你指令再接著執行。斷點麼,就是中斷的點唄,就是程式執行到此時,先中斷下了,停下了讓我看看:)

1.要想用vs來除錯,先要讓啟用伺服器端除錯,就是在iis中設定一下就行,iis7中設定如下圖示(iis7中不僅網站那要設定,在IE那也要設定才能生效):



2.在IE的 Internet選項-->設定-->禁用高階除錯(取消打鉤)-->顯示友好Http錯誤資訊(取消打鉤)



3.在要除錯的地方,插入stop語句:



4.在ie中訪問頁面,此時會彈出對話方塊,選擇vs2005或者vs2010作為偵錯程式都行,並點選“是”(VS2010退出的時候貌似存在點問題)



之後,會有附加安全警告,不用理會,選擇附加到此程式即可,即點選“附加”。就會出來除錯介面:

大家注意4個地方:



最上面的除錯工具欄,那有進行跟蹤除錯的命令按鈕。

最左邊的黃色箭頭和這一灰色列,黃色箭頭告訴我們現在程式執行到那一步了。

右邊解決方案資源管理器是iis伺服器載入的asp檔案。

最下面的一些提示欄還是很有幫助的,比如呼叫堆疊,區域性變數,監視等。

現在結合除錯例項,一一為大家進行解釋。

首先要了解除錯工具欄,為大家介紹常用的幾個:



點選綠色三角則讓程式繼續執行,如果後面有斷點(後面介紹如何設定斷點)或者stop則又會中斷,否則asp中伺服器腳步執行完畢,就能在頁面中看見結果。第三個藍色方塊按鈕,是指結束除錯,即使有斷點也不會中斷了。黃色箭頭是用來顯示當前中斷的位置,可能我們檢視其他頁面的程式碼,忘記當前程式執行到哪了,點選黃色箭頭就能立刻轉到程式執行點(黃色箭頭所指位置表示該語句還未執行)。

然後接下來的三個按鈕是跟蹤方式(要理解其含義),第一個(快捷鍵f11,即從左至右第六個)是指單步執行程式碼,如果遇到函式呼叫(自己寫的),也單步執行進去。第二個(快捷鍵f10)按鈕也是單步執行程式碼,但是遇到函式呼叫就不會執行進去(也就是說,在賦值語句,或者沒有函式呼叫的語句中,f10和f11的作用一樣的)。第三個(快捷鍵shift+f11)按鈕也是快速返回,就是說當我們通過f11跟蹤到某個函式裡時,按該鍵,就會執行完該函式,並返回到呼叫函式的下一句。



比如,伺服器準備執行Easp.Use “tpl”這條語句了,如果我按f10,那麼黃色箭頭將移動到下一條語句:Easp.Tpl.Load "test.html" 。如果按f11則會跟蹤到Easp.Use這個函式中,如下圖:



對於Use我們沒什麼疑問,不想在Use函式裡面一步一步跟蹤了,就可以按shift+f11(點選工具欄按鈕也行J)就會跳出Use函式,程式就會在Easp.Tpl.Load "test.html"語句處中斷。

在跟蹤的過程中,可能會遇到了迴圈語句,如果是幾百次的迴圈,還一步一步的跟蹤下去的話,那還不累死人。當然可以在除錯之前,就在迴圈結束後寫一個stop語句,點選綠色三角,跳過迴圈。但是如果開始沒料想到呢?不至於結束了從來吧:(。這個時候我們就可以用斷點功能了!設定斷點就好像是我們在跟蹤的時候動態的插入stop語句。方法很簡單,在想中斷的語句地方,點選右鍵,選擇斷點->插入斷點。這是,在灰色列就會多一個紅色小圓點,那就表示中斷點。





此時表示在 Easp.W Easp.Tpl.GetHtml 設定了斷點,當程式執行到此處就會停止下來。

剛才大致給大家介紹瞭如何用stop語句來啟用vs進行除錯,然後,在除錯的過程中如何設定斷點,並進行一步一步的跟蹤,如果跟蹤到函式中,又如何快速的從函式中跳出來。不過,我們除錯的目的是從中找出bug來,關鍵點就是要檢視變數的值,那麼我們來看看用在靜態除錯中,要寫一堆的東東來檢視,但在動態除錯中不費吹灰之力就能獲得。

最簡單的就是點選最下面的“區域性變數”



當前的所有變數都能看見,而且變數的值,變數的型別也都清清楚楚。對應物件變數點選加號還能展開檢視很多的資訊。


呵呵,不用寫任何語句就能看見:訪問該頁面時,有一個get引數,“id=123”,檢視session啊,application啊都很方便,自己定義的變數更是不用說,當然,如果程式沒執行到變數賦值處,就什麼也沒有哦。即使是記錄集檢視起來也很方便。

因為是在asp頁面中中斷,所以能檢視到很多全域性的變數,而進入函式中就,點選“區域性變數”就真只能監視函式中的變數了。其中,Me是指物件本身,有點像面嚮物件語言中的this指標。



呵呵,其實不用急,點選“監視”,在名稱列中,輸入想要知道的變數名,然後回車,即可!而且在這裡面動態的輸入計算都沒問題!



這樣除錯是不是比trace更方便一些?不用為了測試變數值去寫一堆程式碼,而且在看程式邏輯上看來n遍都覺得無錯誤時,就是不知道變數是在哪出錯時,用動態跟蹤就很簡單了。還有更多的功能,就不介紹了,大家研究了記得貢獻成果哦!

嘻嘻,其實完全可以用VS來寫asp網站,這樣編寫和除錯完全整合在一起,除錯時stop都不用寫了:),而且vs還能整合vss,svn這樣的原始碼管理工具,團隊開發也很方便。總之是用vs來寫是好處多多啊(哎,被微軟的IDE毒害太深了!),只是沒有DW那種關於Easp的智慧提示(但有vbscript的提示),但是寫熟後Easp的那幾個函式還記不住?


PS:早先寫在另外一個部落格的文章~

相關文章