首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获取抛出异常的行号?

如何获取抛出异常的行号?
EN

Stack Overflow用户
提问于 2010-07-25 19:25:47
回答 13查看 240.8K关注 0票数 234

catch块中,如何获取抛出异常的行号?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2010-07-25 19:52:25

如果除了从Exception.StackTrace获得的格式化堆栈跟踪之外,还需要行号,则可以使用StackTrace类:

代码语言:javascript
复制
try
{
    throw new Exception();
}
catch (Exception ex)
{
    // Get stack trace for the exception with source file information
    var st = new StackTrace(ex, true);
    // Get the top stack frame
    var frame = st.GetFrame(0);
    // Get the line number from the stack frame
    var line = frame.GetFileLineNumber();
}

请注意,只有当存在可用于程序集的pdb文件时,这才会起作用。

票数 317
EN

Stack Overflow用户

发布于 2010-07-25 19:32:45

简单的方法,使用Exception.ToString()函数,它会返回异常描述后的行。

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

票数 89
EN

Stack Overflow用户

发布于 2015-02-13 17:15:36

如果您没有.PBO文件:

C#

代码语言:javascript
复制
public int GetLineNumber(Exception ex)
{
    var lineNumber = 0;
    const string lineSearch = ":line ";
    var index = ex.StackTrace.LastIndexOf(lineSearch);
    if (index != -1)
    {
        var lineNumberText = ex.StackTrace.Substring(index + lineSearch.Length);
        if (int.TryParse(lineNumberText, out lineNumber))
        {
        }
    }
    return lineNumber;
}

Vb.net

代码语言:javascript
复制
Public Function GetLineNumber(ByVal ex As Exception)
    Dim lineNumber As Int32 = 0
    Const lineSearch As String = ":line "
    Dim index = ex.StackTrace.LastIndexOf(lineSearch)
    If index <> -1 Then
        Dim lineNumberText = ex.StackTrace.Substring(index + lineSearch.Length)
        If Int32.TryParse(lineNumberText, lineNumber) Then
        End If
    End If
    Return lineNumber
End Function

或者作为Exception类的扩展

代码语言:javascript
复制
public static class MyExtensions
{
    public static int LineNumber(this Exception ex)
    {
        var lineNumber = 0;
        const string lineSearch = ":line ";
        var index = ex.StackTrace.LastIndexOf(lineSearch);
        if (index != -1)
        {
            var lineNumberText = ex.StackTrace.Substring(index + lineSearch.Length);
            if (int.TryParse(lineNumberText, out lineNumber))
            {
            }
        }
        return lineNumber;
    }
}   
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3328990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档