search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

[C#] 透過 CallerMemberName/CallerLineNumber 取得呼叫的方法與行號來快速除錯! | 不只是個工程師

工程師在開發的時候雖然可以透過斷點或 Visual Studio 會自動跳轉至 crash 的地方來得之 crash 的位置。可是有時候就算知道 crash 的方法是什麼,還是會不知道崩潰的原因。其中若是呼叫端的錯誤導致崩潰,而又有超多的地方在乎叫這個方法時,那就會很難找到特定導致崩潰的呼叫端;抑或者是已經 release 了,需要噴 log 出來避免在使用者端 crash 時不知道是哪一段呼叫這個方法導致崩潰的時候,以下介紹的方法就可以得知是誰呼叫了我的方法,以及呼叫的方法在哪一行!

由於 visual studio C# 可以在方法中預先指定好預設參數令呼叫端可以直接使用該方法。因此透過這種方式,就可以創造出如下的方法令使用者不需要傳遞任何參數就可以在該方法內得知使用者在哪個方法,哪一行內呼叫 MyMethod() !
其中在 string call = null 前面加上 [CallerMemberName] 代表著要把 string 型別,參數名稱為 call 的參數改成呼叫端的方法名稱;同樣的在 int line = 0 前面加上 [CallerLineNumber] 代表著要把 int 型別,參數名稱為 line 的參數改成呼叫端的行號。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Program
{
private static void MyMethod([CallerMemberName] string call = null, [CallerLineNumber] int line = 0)
{
Console.WriteLine($"Call: {call}");
Console.WriteLine($"Line: {line}");
}

private static void Main(string[] args)
{
MyMethod();
}

///
/// Call: Main
/// Line: 11
///
}

如上因為我在 Main() 內呼叫了 MyMethod(),故 output 出來的參數就會是 Call: Main, Line: 11;即呼叫端的方法為 Main, 並且在第 11 行 呼叫。


✏以上就是一種實用的除錯方法,
💡希望對正在閱讀的你也有幫助,若有誤的地方也歡迎指教。
❓若有什麼疑問歡迎下方留言,我會盡速回復您!


支持|不只是個工程師

若我的文章對您有幫助, 歡迎 請我喝杯咖啡

或是 訂閱「不只是個工程師」👍
也歡迎登入 LikeCoin,點擊下方拍手按鈕👇,免費支持 Leo!



熱門推薦

本文由 leotalk-engineerlifecom 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦