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

C# System.Exception的StackTrace属性被截断问题排查求助

异常StackTrace截断的核心原因
  • Visual Studio调试默认开启仅我的代码(Just My Code) 过滤:调试时会自动隐藏系统程序集、第三方未加载符号的调用帧,只展示用户编写的代码栈段,中间被隐藏的部分就会显示为...截断标识,该逻辑和编译时的调试信息配置无关。
  • 异常重抛逻辑错误:捕获异常后使用throw ex;而非直接throw;重抛,会直接重置堆栈跟踪的起始位置,原始的上层调用栈会被丢弃。
  • .NET运行时默认堆栈精简:.NET Core 3.0及以上版本默认会过滤堆栈中的系统基础库调用帧、异步调度生成的编译器内部帧,仅保留用户代码相关栈段,输出时自动用...代替被过滤的部分。
  • 异步调用栈固有精简:async/await 场景下,运行时默认不会保留完整的异步调度上下文栈,只会展示和业务逻辑相关的栈帧。
对应解决方案
  • 关闭VS仅我的代码调试选项:打开Visual Studio的「工具>选项>调试>常规」,取消勾选「启用仅我的代码」,重启调试后即可在断点中看到完整的StackTrace信息。
  • 修正异常重抛逻辑:所有需要重抛异常的场景,统一使用无参数的throw;语句而非throw ex;;如果需要封装异常为自定义异常,必须将原始异常作为InnerException参数传入新异常的构造函数,后续可通过内部异常获取完整原始栈。
  • 强制开启全堆栈输出:如果需要在运行时日志中输出完整堆栈,可在程序启动前设置系统环境变量DOTNET_SYSTEM_DIAGNOSTICS_FULLSTACKTRACES=1,或是在项目的runtimeconfig.json的configProperties节点下添加"System.Diagnostics.StackTrace.ShowInferredFrames": "true"配置。
  • 优化异步场景堆栈完整性:.NET 6及以上版本可在项目文件的PropertyGroup节点中添加<ExceptionStackTraceSupport>true</ExceptionStackTraceSupport>配置,可保留更多异步调度相关的栈帧信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 19:06:08