You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何仅获取异常堆栈跟踪信息的第一行?

获取异常堆栈跟踪第一行的实现方案

我们的目标是提取异常抛出的原始位置对应的首行堆栈信息,快速定位问题触发点。


C# 实现

目标输出格式如下:

at Solution.Models.Class.Method() in C:\Users...\Models\Class.cs:line 1118

方法1:直接拆分堆栈字符串(简单快速)

try
{
    // 此处放置你的业务代码
}
catch (Exception ex)
{
    string firstStackLine = ex.StackTrace?
        .Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
        .FirstOrDefault() ?? "无有效堆栈信息";
    // 按需打印或存储该字段
    Console.WriteLine(firstStackLine);
}

方法2:通过StackTrace类精准获取(更稳定,适配复杂场景)

不需要手动拆分字符串,对异步方法、嵌套调用场景兼容性更好:

using System.Diagnostics;

try
{
    // 此处放置你的业务代码
}
catch (Exception ex)
{
    StackTrace stackTrace = new StackTrace(ex, true);
    StackFrame firstFrame = stackTrace.GetFrame(0);
    if (firstFrame != null)
    {
        string firstStackLine = $"at {firstFrame.GetMethod()} in {firstFrame.GetFileName()}:line {firstFrame.GetFileLineNumber()}";
        // 按需打印或存储该字段
        Console.WriteLine(firstStackLine);
    }
}

注意事项

  • Release模式下如果关闭了PDB文件生成,将无法获取到源码路径和行号,仅能拿到方法名
  • 处理异步方法的异常堆栈时优先使用第二种实现,可以自动过滤状态机相关的冗余内容

内容的提问来源于stack exchange,提问作者Carlos Rodriguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:15:03