如何在.NET Core中定位Visual Studio输出的“Exception Thrown”异常
排查非主线程未捕获InvalidCastException的方案
1. 强制调试器在指定异常抛出时中断
- 调试状态下按
Ctrl + Alt + E打开「异常设置」面板 - 搜索
System.InvalidCastException,勾选该异常前的复选框。配置后无论异常发生在哪个线程、是否被代码捕获,调试器都会在异常抛出的第一时间中断,直接定位到出错的代码行 - 如果需要排查所有未捕获异常,可以勾选「公共语言运行时异常」根节点,让调试器捕获所有CLR层抛出的异常
2. 全局捕获异常输出完整堆栈
如果不想每次异常都中断,可以在程序入口处添加全局异常监听代码,将全量异常信息打印到调试输出窗口:
// 捕获非UI线程未处理异常 AppDomain.CurrentDomain.UnhandledException += (s, e) => { System.Diagnostics.Debug.WriteLine($"未处理异常详情:\n{e.ExceptionObject}"); }; // 捕获异步Task未观察到的异常 TaskScheduler.UnobservedTaskException += (s, e) => { System.Diagnostics.Debug.WriteLine($"未观察Task异常详情:\n{e.Exception}"); e.SetObserved(); };
3. 调试配置优化
- 打开「工具」->「选项」->「调试」->「常规」,取消勾选「仅我的代码」,可以获取到跨库调用的完整堆栈信息
- 右键点击输出窗口空白处,确认「异常消息」「堆栈跟踪」选项已勾选,保证所有异常相关信息都会被输出
内容的提问来源于stack exchange,提问作者Vaccano
相关产品推荐
相关产品推荐

