运行结果:

文件名
D:\CSharp\函数名代码行源代码文件名\WindowsFormsApp1\WindowsFormsApp1\Form1.cs
函数名
button1_Click
代码行1
24
代码列1
13
代码行2
24
代码列2
13
截图:
程序在代码中的实际位置

因此得出结论,输出的是上图“st”定义的位置。

对应的输出内容:(可以观察到列增加了2格)
文件名
D:\CSharp\函数名代码行源代码文件名\WindowsFormsApp1\WindowsFormsApp1\Form1.cs
函数名
button1_Click
代码行1
24
代码列1
15
代码行2
24
代码列2
15
详细代码如下:
private void button1_Click(object sender, EventArgs e)
{
StackTrace st = new StackTrace(new StackFrame(true));
Console.WriteLine(" Stack trace for current level: {0}", st.ToString());
StackFrame sf = st.GetFrame(0);
Console.WriteLine(" File: {0}", sf.GetFileName());
Console.WriteLine(" Method: {0}", sf.GetMethod().Name);
Console.WriteLine(" Line Number: {0}", sf.GetFileLineNumber());
Console.WriteLine(" Column Number: {0}", sf.GetFileColumnNumber());
richTextBox1.Text = "";
richTextBox1.AppendText("文件名\r\n");
richTextBox1.AppendText(sf.GetFileName());
richTextBox1.AppendText("\r\n函数名\r\n");
richTextBox1.AppendText(sf.GetMethod().Name);
richTextBox1.AppendText("\r\n代码行1\r\n");
richTextBox1.AppendText(sf.GetFileLineNumber().ToString());
richTextBox1.AppendText("\r\n代码列1\r\n");
richTextBox1.AppendText(sf.GetFileColumnNumber().ToString());
richTextBox1.AppendText("\r\n代码行2\r\n");
richTextBox1.AppendText(sf.GetFileLineNumber().ToString());
richTextBox1.AppendText("\r\n代码列2\r\n");
richTextBox1.AppendText(sf.GetFileColumnNumber().ToString());
}
参考连接
anlog
2024年4月28日
本文介绍了如何在C#中使用StackTrace和StackFrame类获取当前执行的函数名、代码行数以及源代码文件信息,展示了button1_Click事件中的具体代码示例。
https://learn.microsoft.com/zh-cn/dotnet/api/system.diagnostics.stackframe?view=netframework-4.8&devlangs=csharp&f1url=%3FappId%3DDev17IDEF1%26l%3DZH-CN%26k%3Dk(System.Diagnostics.StackFrame)%3Bk(TargetFrameworkMoniker-.NETFramework%2CVersion%253Dv4.8)%3Bk(DevLang-csharp)%26rd%3Dtrue
1407

被折叠的 条评论
为什么被折叠?



