如何在 Linux 上的 .NET 6 中抛出异常的 StackTrace 中获取行号

Posted

技术标签:

【中文标题】如何在 Linux 上的 .NET 6 中抛出异常的 StackTrace 中获取行号【英文标题】:How to get line number(s) in the StackTrace of an exception thrown in .NET 6 on Linux 【发布时间】:2022-01-17 09:23:23 【问题描述】:

我在 .NET 6 Framework 下编译(我也试过 .NET Core 3.1)Visual Studio 中的 C# 代码

虽然它在 Windows 下运行良好,但使用相同的选项,我无法在 Linux (Ubuntu 18.04) 下获取异常的 StackTrace 中的行号。

存在 pdb 文件 在 Linux 机器上安装了 .NET 6 部署模式:自包含

【问题讨论】:

你是用 Debug 还是 Release 配置编译的? 发布,但我也尝试调试以进行测试,但没有帮助。 【参考方案1】:

试试这个方法。我是在需要出错的行号时写的。

''' <summary>
''' 
''' </summary>
''' <param name="ex"></param>
Public Sub ErrorShow(ByVal ex As Exception)
    Dim Result As String
    Dim hr As Integer = Runtime.InteropServices.Marshal.GetHRForException(ex)
    Result = ex.GetType.ToString & "(0x" & hr.ToString("X8") & "): " & ex.Message & Environment.NewLine & ex.StackTrace & Environment.NewLine
    Dim st As StackTrace = New StackTrace(ex, True)
    For Each sf As StackFrame In st.GetFrames
        If sf.GetFileLineNumber() > 0 Then
            Result &= "Line:" & sf.GetFileLineNumber() & " Filename: " & IO.Path.GetFileName(sf.GetFileName) & Environment.NewLine
        End If
    Next
    Console.WriteLine(Result)
End Sub

【讨论】:

以上是关于如何在 Linux 上的 .NET 6 中抛出异常的 StackTrace 中获取行号的主要内容,如果未能解决你的问题,请参考以下文章

如何捕获ctypes中抛出的异常?

Discord.NET - 获取命令中抛出了哪种类型的异常

在Scala中抛出异常,啥是“官方规则”

捕获在不同线程中抛出的异常

如何在扩展中抛出异常?

如何在 C 中抛出异常?