在捕获块中,如何获得抛出异常的行号?


当前回答

如果你的堆栈跟踪大于1,它应该是:

var st = new StackTrace(es, true);
// Get the top stack frame
var frame = st.GetFrame(st.FrameCount - 1);

//从栈帧中获取行号 var line = frame.GetFileLineNumber();

其他回答

您可以包含与程序集关联的. pdb符号文件,其中包含元数据信息,当抛出异常时,它将在异常起源的堆栈跟踪中包含完整的信息。它将包含堆栈中每个方法的行号。

简单的方法,使用exception . tostring()函数,它将返回异常描述之后的行。

您还可以检查程序调试数据库,因为它包含关于整个应用程序的调试信息/日志。

我添加了一个扩展到Exception,它返回行,列,方法,文件名和消息:

public static class Extensions
{
    public static string ExceptionInfo(this Exception exception)
    {

        StackFrame stackFrame = (new StackTrace(exception, true)).GetFrame(0);
        return string.Format("At line {0} column {1} in {2}: {3} {4}{3}{5}  ",
           stackFrame.GetFileLineNumber(), stackFrame.GetFileColumnNumber(),
           stackFrame.GetMethod(), Environment.NewLine, stackFrame.GetFileName(),
           exception.Message);

    }
}
Convert.ToInt32(ex.StackTrace.Substring(ex.StackTrace.LastIndexOf(' ')));  

这将给出异常行no。

如果你的堆栈跟踪大于1,它应该是:

var st = new StackTrace(es, true);
// Get the top stack frame
var frame = st.GetFrame(st.FrameCount - 1);

//从栈帧中获取行号 var line = frame.GetFileLineNumber();