2011年9月28日 星期三

Visual Studio 使用「附加至處理序」來進行偵錯

上一篇文章「把正在開發的網站專案新增到IIS的站台」有說到如何在IIS去建立一個站台並將目錄並使用網站專案的路徑,然後在文章最後也說到會說明如何不使用「F5」來進行偵錯,時常看到專案的成員在編寫程式到一個段落後,看測試功能時,就會按下「F5」去執行,這時候就會看到Visual Studio 進入偵錯模式,然後開啟瀏覽器,接下來瀏覽器開啟網站的預設起始頁,再來就是開始測試他所編寫的功能,假如他所寫的功能,其路徑是在網站某個深處時,就開始要拔山涉水的一直點連結或是操作某些功能後才能到達,多半都只是為了要去測試那一些功能而已,卻要花那麼多的時間成本,實在是不值得。

而「附加至處理序」則是可以讓你在瀏覽器還在操作專案的某些功能時,如果想要在當前頁面進行偵錯時,就派上用場,不必重新啟動瀏覽器也不必整個程序重來一遍(除了有重新建置過且已有加入身分認證的除外)。

如果再搭配上「把正在開發的網站專案新增到IIS的站台」,既使還沒開啟Visual Studio的狀況下,可以瀏覽網站,要進行偵錯時,再把Visual Studio打開並載入專案後去使用「附加至處理序」來進行偵錯。



先看一看MSDN上面所介紹的「附加至執行中處理序」

MSDN - 附加至執行中處理序

再來看看91的一篇文章,一樣也是介紹使用附加至處理序來偵錯:

91 - [修練營ASP.NET]附加處理序-偵錯

 

在進入主題前,要先說明一點,「附加至處理序」來偵錯的功能並不限定網站專案要在IIS新增一個站台,如果先前有按「F5」去執行過,也啟動了ASP.NET Developement Server(ASP.NET 開發伺服器),在處理序列表中有列出來,一樣也可以附加上去。

首先,我們先用瀏覽器開啟要進行偵錯的網站、網頁:

image

 

回到Visual Studio中(或是開啟Visual Studio並載入網站專案)

「Ctrl + Alt + P」

上面是「附加至處理序」的快捷鍵,請務必牢記,或者是你可以在以下兩個地方找到它:

上方功能列的「偵錯」

image

另一個則是上方功能列的「工具」下

image

總之使用快捷鍵是最快的方式。

 

執行「附加至處理序」之後,會開啟一個視窗:這裡面會顯示所有目前可使用的處理序列表。

注意:有時候會找不到我們要使用的處理序時,請勾選視窗下方的「顯示所有使用者的處理序」及「顯示所有工作階段中的處理序 」。

image

 

接下來在「可使用的處理序」中按下「W」鍵,因為我們要附加的處理序的字首都剛好是W開頭,

w3wp.exe,這是選擇附加到IIS的處理序中。

WebDev.WebServer40.EXE,這個則是選擇要附加到ASP.NET 程式開發伺服器的處理序中。

image

 

有個情況是,如果在IIS下有數個站台並且也都有執行時,這時候會在處理序表列表看到多個w3wp.exe,搞不清楚要附加哪一個時,這個時候就去把「使用者名稱」欄位給拉大一些,就可以清楚看到名稱,就知道要附加哪一個了。

image

 

在這裡我們就附加到w3wp.exe而且使用者名稱為「IIS APPOOL\MvcPage [系統管理員]」的處理序中去做偵錯,按下「附加」後,會再出現一個附加安全性警告的視窗,反正就是按下「附加」就對了。

image

 

開始偵錯後,只要在程式中有下中斷點的地方就會停住,就可以開始偵錯作業,這樣的操作就跟按「F5」之後的操作是一樣的,差別就在於,「附加至處理序」是直接attach到目前作業系統中正在運行的處理序。

image

 

狀況一

另外要偵錯前,如果程式有修改過,也請一定要先建置過或是重新建置過後再進行偵錯,不然會遇到:

image

所以有修改過程式,一定要先執行「建置方案」或是「重建方案」後才可以進行偵錯。

PS. 「建置方案 (F6)」與「重建方案 (Alt + B + R)」的差別:

「建置方案」先檢查方案中的程式是否有更動、修改過,如果有則重新編譯,如果沒有則不動作。

「重建方案」不管方案的程式是否有無更動、修改過,都會重新編譯。

最好的方法就是,不管有沒有修改過程式,要進行偵錯前都先使用快捷鍵,

「Alt + B + R」

直接進行「重建方案」。

 

狀況二

如果是附加的處理序是IIS的站台,IIS的應用程式集區的Ping設定未經過調整前會出現這樣的狀況:

image

我們就到IIS的應用程式集區去修改Ping設定:

image

於要修改的應用程式集區項目上按下滑鼠右鍵並且選擇「進階設定」:

image

開啟「進階設定」的視窗,移到最下方後可以看到「處理序模型

image

我們要修改的地方是「Ping週期(秒)」,可以把週期時間加大一些,像我的話都會設「999」或是「9999」,(注意!這個設定的修改只限於在開發環境的IIS,如果是在正式環境的話,可不要隨意更動。)修改完「Ping週期(秒)」設定後,除了按下該視窗的「確定」鍵之外,也務必要重新啟動IIS伺服器,這樣才能讓修改後的設定套用在之後執行的處理中。

「附加至處理序」在Visual Studio的執行動作是比直接按「F5」要繁瑣一點,但是其好處是,當我已經開啟瀏覽器執行系統並操作網頁時,我可以在當下就開啟Visual Studio然後直接進行偵錯,而且結束偵錯後,也不會把瀏覽器給關閉,結束偵錯後依然可以繼續操作網頁,就是如此的方便,所以呀,一定要習慣使用「附加至處理序」的方式來進行系統的偵錯,讓我們的開發更加快速、更加有效率!!

 

以上

沒有留言:

張貼留言

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。