跳到主要內容

Asp.Net Core Debug Source Code

寫過Asp.Net Core Web MVC應該知道裡面要使用很多的Middleware,如果要知道裡面的運作方式,就要看Source Code,或者想知道自己寫的程式哪裡出問題,有時候就必須Debug進Source Code中看變數的變化

如何Debug Source Code我是參考DEBUGGING ASP.NET CORE 2.0 SOURCE CODE這篇文章來設定的,作法如下:

1.點選[工具]的[選項] 

2.展開[偵錯]的[一般],並將[啟用Just My Code]的選取方塊取消,以及[啟用來源連接支援]的選取方塊點選起來 

3.接著點選[偵錯]的[符號],並將[Microsoft伺服器]的選取方塊點選起來 (點選之後會出現提示視窗,因為載入這些符號,會導致一些效能上的影響,尤其是首次載入,讓我以為Visual Studio當機了...)

這樣就可以Debug Source Code了,接著開始測試看看 :

1.先開啟一個新的專案(我選擇Asp.Net Core Web 應用程式)

2.因為只是測試所以都用預設的, 一直按確定就好, 除了Asp.Net Core 3.1改成5.0(操作方式都一樣沒差, 我只選5.0只是為了節省下載符號的時間以及空間而已,如果我選3.1它會下載這個版本的符號一次, 下次我選5.0它又會下載這個版本的符號一次)



3.專案自動建好後, 於視窗右邊的 HomeController.cs 按兩下, 視窗左邊就會看到檔案的內容, 接著找到 Index 的 rertrn View(), 在這列的前面點一下即可設定中斷點, 就像下圖的左邊紅色圈圈一樣(因為要顧到初學者所以才會說的這麼仔細)

4.設定好中斷點(紅色圈圈)之後, 過來就按下 [ IIS Express ] 的執行(上圖中中間上面的黃色圈起來的地方), 或者按下 F5, 就會開始執行程式

5.如果是第一次執行, 可能會出現一個確認視窗, 要你確認是否IIS Express的SSL憑證?按下是即可, 下面一個視窗也請按是


6.接著畫面會停止不動像當機一樣, 不是當機只是第一次抓符號要很久, 只要耐心等候直到 return View() 由紅底變成黃底就跑完了, 黃色底的列代表程式目前執行到這, 暫時不繼續執行, 如下圖


7.接著點擊右上部的堆疊框架(如上圖的紅色框起來的地方), 展開後會出現如下圖的畫面

裡面列出了從開始到中斷點之執行經過(越下面的越早執行), 就可以清楚地看到 DeveloperExceptionPageMiddleware, HttpsRedirectionMiddleware, StaticFileMiddleware, EndpointRoutingMiddleware, AuthorizationMiddleware, EndpointMiddleware 的執行順序, 剛好與 Startup.cs 檔案中所寫的程式碼順序一模一樣, 如下圖 :


8.如果我想看 UseHttpsRedirection 的程式碼, 就可以點一下[堆疊框架]中的 HttpsRedirectionMiddleware, 第一次的話會出現一個如下圖的視窗, 選擇 [下載程式檔並繼續偵錯], 就會自動下載並開啟 Source Code 視窗, 我就可以去看原始碼是如何寫這功能的, 是程式學習的很好工具


9.如果我想要在 Source Code 中逐步執行(F11), 就可以在剛剛的 HttpsRedirectionMiddleware.cs 中設定中斷點即可, 我的操作如下 :

    9a.在 Invoke 副程式的第一列設中斷點(如下圖, 程式碼如果沒改變的話應該是83列)


    9b.接著按下 Shift+F5 停止偵錯剛剛停掉的中斷點(return View()), 再重新按下 F5 執行, 程式就會停在 HttpsRedirectionMiddleware.cs 中我設的中斷點上了(如下圖)


    9c.接著去看自動變數的視窗(如上圖左下角的紅色框區域)(通常我只看監看式視窗而已, 要看甚麼變數自己加), 如裡面有個 context 變數, 展開後有很多的資料, 了解一下對提升網站知識是很有幫助的, 展開後裡面的 context.Request.RouteValues 這個時候是沒資料的, 因為 RouteValues 要經過 EndpointRoutingMiddleware 才會出現, 也就是app.UseRouting()之後才會有資料, 在這之前的程式都不會有資料的, 這我怎麼知道的呢? 在EndpointRoutingMiddleware.cs上設中斷點, 去觀察RouteValues的變化就會知道它是在這裡出現資料的 

10.從這個例子就知道 Startup.cs中的Configure程式碼的順序非常重要, 排錯了會出事情的

開發工具 : Visual Studio 2019 16.8.3版
專案 : Asp.Net Core Web 應用程式(MVC, .Net 5.0)


留言

這個網誌中的熱門文章

Excel VBA (二) : 自訂函數之自動加總(續)

繼續上篇的 Excel VBA (一) : 自訂函數之自動加總 來修改程式 加總時如果要將非數字的全部濾掉, 我利用 TypeName 這個函數來完成, 再將Excel的C欄資料除了文字型別以外, 加上日期以及布林型別, 測試結果如下 Function 我的加總(加總區域 As Range) As Double Dim data As Variant 我的加總 = 0 For Each data In 加總區域 If TypeName(data.Value) = "Double" Then 我的加總 = 我的加總 + data End If Next End Function 如果我現在很懶, 懶得選擇加總區域, 讓它自動將它上方的資料自動加總起來, 例如在A10中輸入自訂函數, 則會自動將A1到A9的儲存格都加總起來, 我的懶人程式如下 : Function 我的加總2() As Double Dim 目前儲存格 As Range Dim 目前列 As Integer Dim i As Integer Set 目前儲存格 = Application.Caller 目前列 = 目前儲存格.Row 我的加總2 = 0 For i = 1 To 目前列 - 1 Set 目前儲存格 = 目前儲存格.Offset(-1, 0) If TypeName(目前儲存格.Value) = "Double" Then 我的加總2 = 我的加總2 + 目前儲存格 End If Next End Function Application.Caller : 會取得函數計算的儲存格, 它的行跟列可以透過Column跟Row來取得 ( 參考文章 ) 加總則是從同欄的第一列開始加, 一直加到輸入的前一列, 也就是 Application.Caller.Row - 1 offset(-1,0) : 則表示要位移的位置, -1 表示垂直往上一格, 0 表示水平維持不變 我在A10輸入自

Excel VBA (一) : 自訂函數之自動加總

最近幫忙別人解決 Excel 的資料處理問題, 順便將一些使用心得做一下筆記 當我開啟Excel時, 預設是沒有 開發人員 的功能(如下圖的紅框) 要開啟就要點擊Excel選單的 檔案 (如上圖的黃框) 再點擊 選項 (如下圖的紅框) 再點擊 自訂功能區 (如下圖的紅框) 再將 開發人員 的功能打開即可(如下圖的紅框) 開啟開發人員中的 Visual Basic (如下圖的紅框)就會開啟VBA的功能視窗了 我先嘗試最簡單的程式, 看看是否成功(如下圖) Function 我的加總() As Double     我的加總 = 100 End Function 再去Excel的工作表1中, 在任一儲存格中輸入"=我的加總()", 測試是否會顯示 "100"(如下圖), 結果成功了, 代表Excel VBA中函數與變數名稱都是可以用中文 再來就是真正開始寫程式了, 如果真正要寫的完整會要寫很多例外處理, 這邊只做簡單的版本, 請大家見諒喔!以下是我完成的程式碼 Function 我的加總(加總區域 As Range) As Double     Dim data As Variant     我的加總 = 0     For Each data In 加總區域         我的加總 = 我的加總 + data     Next End Function 在Excel中輸入如下圖的資料來測試 繼續在B8儲存格中點選 "插入函數fx" (如下圖) 出現Excel的函數視窗後, 函數類別選擇 "使用者定義" 會出現 "我的加總" 函數, 按下確定後選擇A1..A5的加總區域, 結果顯示15, 代表程式初步測試OK! 再來我將 B5 故意留空白, 也讓它加總看看, 手動將B8的 "A1:A5" 改成 "A1:B5" 結果顯示29(成功)! 再來是C1我故意輸入文字 "A", 讓它加總看看, 手動將B8的 "A1:B5" 改成 "A1:C5", 結果顯示 "#VALUE!", 如果要改

Excel VBA (三) : 自訂函數參數的另一種用途

如果有用自訂函數來完成工作的人, 可能會發現有的自訂函數當你改變要計算區域的值時, 結果會跟著改變, 有的則不會跟著變, 如 Excel VBA (一) : 自訂函數之自動加總 會跟著變, 而 Excel VBA (二) : 自訂函數之自動加總(續) 則不會改變, 而這個答案就是參數 如果想要計算範圍內, 只要資料有異動, 則會自動更新計算結果, 就必須將該範圍納入自訂函數的參數( 參考微軟的文章 ), 參數裡的儲存格, 不論多少, 都是Excel監控的對象, 就如同 Excel 中的標準函數, 我只要輸入範圍, 那就會自動更新, 如果沒參數或是輸入資料而已, 如 SIN(100) 就不會有自動更新的功能, 因為沒監控對象 !! 如下圖中A欄黃色儲存格輸入的是 我的加總2() 無參數函數, 而橘色儲存格輸入的是 我的加總(A1:A9) 有參數函數, A欄的結果都是15, 我再將A欄複製到B欄後, 結果當然也是15,但是當我將B1儲存格從1改成2之後, 黃色無參數的結果沒變, 而橘色有參數的結果自動變成16了, 這是有參數的好處 測試時間: 2020年07月29日 測試環境: Windows 10 家用版, Excel 2019 家用版