如何在本地調試服務器上的站點?
如果要在本地調試服務器上的站點我們需要用到一個遠程調試工具msvsmon.exe。
我們可以再VS安裝目錄中找到它
如:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Remote Debugger\x64\msvsmon.exe

因為msvsmon.exe程序需要在服務器上運行我們可以將該程序所在目錄設置為共享目錄,或者直接將其復制到服務器上:

在運行
msvsmon.exe程序前需要先關閉防火牆,如何熟悉防火牆配置可以進行具體的防火牆配置,
這里直接關閉防火牆,以保持通訊能夠正常進行

現在在服務器上運行
msvsmon.exe程序,可以從拷貝的文件中運行,也可以從共享目錄中運行

這里我們以無身份驗證的方式進行調試,打開工具中的選項菜單,進行如下配置

點擊確定

此時我們的服務器也配置完畢。
現在開始在我們本機的VS中調試服務器上的站點。
打開我們的項目,在選擇工具菜單欄下的附加到進程,選擇遠程方式進行傳輸

點擊查找搜索網絡中的主機

選擇我們的服務器主機進行連接,附加我們要調試的工作進程

查看服務器上
msvsmon程序的狀態,可以看到連接成功

然后我們在VS中設置斷點,並且訪問我們的服務器站點

此時可以看到我們VS中的斷點被沒有中斷,這是為什么呢?
我們查看一下輸出窗口可以看到這么一條信息

我們的當前站點編譯成的程序集的並沒有加載到相應的PDB文件,所以無法進行調試。
此時我們就需要獲取到程序集相應的PDB文件
這里我們可以直接將服務器上的發布文件直接拷貝到我們本地,並且對VS進行如下的配置
首先打開工具菜單欄中的選項,展開調試節點下的符號,添加一個新的符號文件位置,位置直接指向我們從服務器上拷貝下來的文件中的bin目錄,
如果有多個站點就添加多個位置信息,也可指向遠程服務器的共享目錄位置,這里可能出現其他問題,暫不細述

接着我們展開調試選項中的常規節點,取消常規中要求源文件與原始版本完全匹配選項。因為我們的開發代碼總會與發布的存在差異

再次附加進程看到輸出中已加載符號

最后我們在訪問我們服務器上的站點,可以看到斷點被成功中斷

注意:
1、
在遠程調試時服務器網站的訪問會被中斷,所以多個請求會導致調試結果出現差異
2、雖然我們可以新建多個
msvsmon的實例進行運行,但是一個工作進程同時只能被一個用戶附加
3、缺失的PDB文件不能直接指向我們的開發項目中的PDB所在bin目錄,因為項目代碼往往與發布站點的代碼有所差異,
因為導致本地開發代碼生成的PDB文件與發布站點的程序集無法正確匹配,因為PDB文件也無法被正確加載
4、可以使用網絡共享或其他方式將服務器站點上的PDB文件公開出來,本地的VS獲取PDB的位置可以直接指向它,因為PC與
網絡環境的差異,此項嘗試可能會存在問題,需要耐心測試(經測試,網絡通暢下,正常可用)
5、本文的示例使用的是無驗證方式的遠程調試,存在一定的安全問題,也可以在
msvsmon
使用包含身份驗證的遠程調試,
在VS使用附加進程的方式時,直接使用默認的傳輸方式即可,此時需要進行計算機賬戶的配置