为了获取C#代码中出错的错误所在行数,可以利用 StackTrace
类。StackTrace
类提供了一个堆栈跟踪,可用于获取发生未处理异常时的调用信息。通过调用StackTrace.GetFrame
方法并指定相应的帧索引,可以获取堆栈上的指定帧中的文件名、行号、列号及代码行
下面是获取出错行号的具体步骤:
第一步:获取StackTrace对象
在出现异常的的 Try Catch 语句块中,获取 StackTrace
对象,如下:
catch(Exception ex)
{
StackTrace st = new StackTrace(ex, true);
// ...
}
实例化 StackTrace
对象时有两个构造函数。其中一个可以传入一个 Boolean
值来指定是否在堆栈跟踪信息中包含方法调用的文件名和行号,正确配置这个参数可以有效地区分报错信息。
第二步:获取堆栈框架
接下来,可以通过 StackTrace
对象的 GetFrame
方法来获取指定的帧,也就是错误堆栈的信息。例如,以下示例获取第一个堆栈帧的文件名、行号和列号:
catch(Exception ex)
{
// 获取堆栈帧
StackTrace st = new StackTrace(ex, true);
StackFrame sf = st.GetFrame(0);
string fileName = sf.GetFileName(); // 获取文件名
string methodName = sf.GetMethod().Name; // 获取方法名
int lineNumber = sf.GetFileLineNumber(); // 获取行号
int columnNumber = sf.GetFileColumnNumber(); // 获取列号
// 输出相关信息
Console.WriteLine("{0} 在文件名{1}:{2}:{3} 上出错", methodName, fileName, lineNumber, columnNumber);
}
在前面的代码中,GetFrame()
方法接受一个整数值参数作为输入,返回堆栈中指定索引的帧。 索引0表示当前正在执行的方法,所以我们将参数设为0以获取GetCurrentMethod
方法的相关信息。
除了获取堆栈信息外,我们还可以通过 MethodBase
类型的 GetMethod
方法获取当前堆栈帧所执行的方法的有关信息。
下面是一个使用 StackTrace
类获取堆栈信息的简单示例:
using System;
using System.Diagnostics;
class Program
{
static void Main()
{
try
{
ThrowException();
}
catch (Exception ex)
{
StackTrace st = new StackTrace(ex, true);
StackFrame sf = st.GetFrame(0);
int line = sf.GetFileLineNumber();
Console.WriteLine("错误发生在第 {0} 行", line);
}
}
static void ThrowException()
{
throw new Exception("出现异常");
}
}
// 输出:错误发生在第 14 行
在这个例子中,我们模拟了一个抛出异常的方法,然后在 Main
方法中调用该方法,将异常信息保存到 StackTrace
和 StackFrame
对象中,并使用 GetFileLineNumber()
方法获取到错误发生的行号信息,最后输出到控制台。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 如何获取出错的错误所在行数信息 原创 - Python技术站