當我們將 Web App 部署在 Azure 上時,如果能夠實現遠程調試,將會極大的提高我們修復 bug 的效率。Visual Studio 一貫以功能強大、易用著稱,當然可以實現基于 Azure 應用的創建、發布和調試。接下來就讓我們一起看看如何使用 Visual Studio 遠程調試部署在 Azure 上的 Web App,以及一些常見的注意事項。
注意工具的版本
在開始正文前讓我們先檢查一下使用的 Azure SDK 版本和 Visual Studio 版本。根據MSDN的介紹,Azure 的遠程調試功能是在 Azure SDK 2.2 中加入的,所以請確保您的機器上安裝了2.2或者是更新的 Azure SDK。
關于 Visual Studio 的版本問題,MSDN上的描述也很有趣。大意是使用 Visual Studio 2012 已經可以遠程調試 Azure 上的 Website 了,但是 Visual Studio 2013 又對此做了很多的提升。個人理解最好使用 VS2013,或者更新的版本。
筆者在寫本文時的實驗環境是 VS2015 update3 和 Azure SDK 2.9。
原理簡介
如果我們要使用運行在機器A上的 Visual Studio 調試另外一臺機器B上運行的一個程序 myapp(機器B上沒有安裝 visual studio),我們不僅要把附帶 pdb 文件的 myapp 程序部署到機器B上,還要在機器B上運行一個調試輔助程序 msvsmon.exe。運行 msvsmon.exe 后,Visual Studio 就能夠 attach 住 myapp 并使用其 pdb 文件進行調試,這就是 Visual Studio 的遠程調試功能。而 msvsmon.exe 程序必須與特定版本的 Visual Studio 相匹配才能工作,所以它被集成在 Visual Studio 的安裝包中,用時去 Visual Studio 的安裝目錄中搜索就能找到。
遠程調試 Azure Web App 和上面的過程是一樣的,只不過我們需要通過云端的配置來指定 msvsmon.exe 對應的 Visual Studio 版本,并告訴云端打開一些調試所需的端口。
下面就讓我們一步步的踏上VS遠程調試 Azure App 之旅。
設置 Deployment credentials
當我們部署網站時就需要創建這個賬號,這個賬號既可以用來部署又可以用來遠程調試。
下載發布用的 publishing profile
Publishing profile 是用于進行發布操作的配置文件。當我們要發布一個網站或者是一個 Web 應用時,需要很多的基本信息,比如服務器在哪里?用戶名是什么?密碼是什么?等等…這些信息統統保存在 publishing profile 文件中,有興趣的朋友可以打開這個文件看看里面的詳細信息。
無論調試與否,我們都要把應用發布到 Azure 上去,所以先下載 publishing profile:
允許遠程調試 Web App
設置 Application settings 中的遠程調試為允許狀態,并指定用于遠程調試的 Visual Studio 版本。相關內容已經在原理部分講過,這里說些需要注意的內容:
這兩項設置是有期限的,在48小時之后默認會被關掉!
原因主要是性能和安全,所以建議大家在調試完成后立即關閉遠程調試功能。
發布調試版本的 Web App
Visual Studio 的調試功能依賴于編譯過程中產生的 pdb 文件。下面的設置就是讓 Web App 在發布時編譯為 debug 版本并產生對應的 pdb 文件。現在的 Visual Studio 已經可以智能的去找 pdb 文件了,所以這里我們不用關心 pdb 文件是被發布到了云端還是保存在本地(簡單就好)!
先導入剛才下載的 publishing profile 文件:
在 Settings 中選擇 Configuration 為 ”Debug”:
然后點擊 “Publish”按鈕進行發布。
Attach 遠程進程
在 Attach 對話框中輸入網站 URL 中去掉”http://”的部分,然后在彈出的對話框中輸入我們在最開始處創建的用戶名和密碼。
在列出的進程列表中選擇”w3wp.exe”:
點擊”Attach”按鈕就可以了。
心急的同學可要注意了,這里可能需要等待上那么一小會兒…
開始遠程調試 Web App
當你看到設置的斷點變成可用狀態時,就可以嘗試去觸發一個斷點了。
好了,看上去還不賴,能夠工作了!
注意,實際使用過程中可能并不會這么的順利。主要是在 attach 的時候,可能需要多試幾次才能成功。調試的過程中速度也是個問題,感覺還是有點慢。
另外,調試 Web 程序經常會碰到讓人很尷尬的一幕:正好有另外的一個用戶在使用這個功能(可能是測試人員),此時不要太吃驚喔!
相關閱讀:
Azure Blob Storage 基本用法 -- Azure Storage 之 Blob
Azure Queue Storage 基本用法 -- Azure Storage 之 Queue
Azure File Storage 基本用法 -- Azure Storage 之 File
Azure Table storage 基本用法 -- Azure Storage 之 Table
文章列表