2022年4月17日 星期日

[研究][ASP.NET]常常跳出「選擇實時調試程序」(choose the just in time debugger)

[研究][ASP.NET]常常跳出「選擇實時調試程序」(choose the just in time debugger)

2022-04-16

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C#

最近在Visual Studio 2022中加了一個,全域應用程式類別 Global.asax 後,

在 Global.asax.cs 中加了一些 C# 程式碼,Deploy 到網站後,.aspx 和 .aspx.cs 執行後,手動輸入故意會觸發 Exception的值,觸發 Exception。但接下來就是麻煩的開始。只要有 Exception出現,就會跳出「選擇實時調試程序」對話盒視窗,Elmah也不會再寄任何通知信了。

選擇實時調試程序

w3wp.exe 中發生未處理的 Microsoft.NET Framework 異常。

可用調試程序

新實例Visual Studio Enterprise 2022







嘗試解決

* 把 Global.asax.cs 新增的 Code 刪除,重新發行 (敝人發佈(deploy) Code 到網站,都是設定會刪除網站所有資料);Exception時依然會跳。

* 把 Global.asax 和 Global.asax.cs 砍了,重新發佈,除零測試時Exception時依然會跳。

*「控制台\系統及安全性\系統管理工具」的「服務」中,把「World Wide Web Publishing服務」重新啟動,無效。

* Visual Studio 2022 不管是否在啟動、不啟動情形,都會跳。

*隨便亂選,可能出現「附加安全性警告」對話盒視窗。

*Visual Studio 2022選「工具」下拉選單,選「匯入和匯出設定」,選「重設所有設定」,做完後,遇到Exception依然會跳。

*Visual Studio 2022選「工具」下拉選單,選「選項」,選「偵錯」,選「Just-In-Time」,右邊「受控碼」、「指令碼」、「機械碼」都把勾選取消,按下「確定」按鈕。但之後遇到Exception依然會跳。

*到IIS管理員,砍掉網站,砍掉「應用程式集區」,重新建立,重新 deploy Code,正常了。

********************************************************************************

方法:用「登錄編輯程式」(Registry Editor)修改登錄機碼(Registry Key)

以系統管理員身分執行 regedit.exe程式,找到下面2~3個機碼,找到右邊視窗的Debugger,刪除掉。

電腦\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

電腦\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework

64位元Windows上還有

電腦\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

這3個機碼的右邊視窗中,「名稱」Debugger,「資料」"C:\Windows\system32\vsjitdebugger.exe" -p %ld -e %ld -j 0x%p





這是Google得到的資訊,敝人沒有實際測試用過。

********************************************************************************

測試:取消Visual Studio的偵錯Just-In-Time設定

Visual Studio 2022選「工具」下拉選單,選「選項」,選「偵錯」,選「Just-In-Time」,右邊「受控碼」、「指令碼」、「機械碼」都把勾選取消,按下「確定」按鈕。但之後遇到Exception依然會跳。



註:敝人後來找了另一台正常的電腦,去看上面 Visual Studio 2022設定,這3個預設是勾選的。

********************************************************************************

嘗試:Visual Studio 做「重設所有設定」

Visual Studio 2022選「工具」下拉選單,選「匯入和匯出設定」,選「重設所有設定」,備份設定,重設所有設定 (不一定成功,因為 Visual Studio可能安裝了某些延伸套件或其他原因)。但之後遇到Exception依然會跳。



********************************************************************************

嘗試:IIS 10.0管理員砍掉該網站,以及該網站使用「應用程式集區」

Windows Server 2019 的「Internet Information Services (IIS) 管理員」砍掉該網站,以及該網站使用「應用程式集區」,重新建立一個新的來使用。後來遇到 Exception 沒有再跳了。



********************************************************************************

結論

其實本篇未必完善解決這個議題,但綜觀了事情從無到有,最後終於遇到 Exception 沒有再跳了,分享點心得。

事情的發生,應該是最初寫的 Code,執行並觸發 Exception後,導致某些某地方的設定被修改了;所以解決要從2方面著手,Source Code要改,否則會不斷導致設定被改、事件發生;另外要改回被改掉的設定、或刪除重建,問題是這設定到底是哪裡的設定?從甚麼被改成甚麼?此次事件敝人是砍掉該網站,以及該網站使用「應用程式集區」,重新建立一個新的而解決。

如果是接手一個別人的 Source Code,有此種情況,舊的Global.asax 和 Global.asax.cs另外備份,然後砍掉;砍掉該網站及使用「應用程式集區」。重新新增一個新的 Global.asax 和 Global.asax.cs,舊的Global.asax 和 Global.asax.cs內容逐一加過來,發佈到網站,進行測試;重複測試到底是加了甚麼 Code 導致。(敝人多年前處理過的案子)

敝人不確定上述是唯一的情況或解法,出事的也不保證都是 Global,只是分享經驗。

(完)

相關

使用即時偵錯工具進行偵錯工具 - Visual Studio (Windows) | Microsoft Docs
https://docs.microsoft.com/zh-tw/visualstudio/debugger/debug-using-the-just-in-time-debugger?view=vs-2022


沒有留言:

張貼留言