如何在Visual Studio 2017中获取异常堆栈跟踪并定位报错代码?
在Visual Studio 2017中获取NullReferenceException的堆栈跟踪
别着急,VS2017的异常调试功能没藏起来,只是换了个位置而已!针对你关注的NullReferenceException,我给你梳理几个靠谱的方法,轻松拿到堆栈跟踪:
一、让VS在异常抛出时直接中断(最有效)
这是定位异常源头的核心步骤,能让你第一时间锁定问题:
- 打开
Exceptions Settings:可以通过顶部菜单栏的Debug→Exceptions Settings,或者直接按快捷键Ctrl+Alt+E(这个快捷键记下来,以后调试超方便) - 在弹出的窗口里,找到
Common Language Runtime Exceptions并展开,往下找就能看到System.NullReferenceException,勾选它的Thrown选项(意思是只要这个异常一被抛出,VS就会立刻暂停程序,而不是等它扩散到崩溃)
二、查看堆栈跟踪的两种场景
1. 程序中断在异常抛出点时
此时直接看右侧的Call Stack窗口:
- 如果窗口没显示,去
View→Other Windows→Call Stack,或者按Ctrl+Alt+C调出 - 这个窗口里会清晰列出从程序入口到当前异常点的所有调用层级,每个条目点击就能直接跳转到对应的代码行,一眼就能找到哪段代码触发了空引用
2. 程序已经崩溃后
如果你没来得及设置中断,输出窗口里其实也有堆栈信息:
- 右键输出窗口→
Clear All,清空之前的输出 - 重新运行程序,等异常出现后,在输出窗口里找以
Exception thrown:开头的段落,里面会跟着一串at 命名空间.类名.方法名(参数信息)的行,这就是完整的堆栈跟踪
三、额外小技巧
- 如果
Call Stack里只显示你的代码,看不到.NET框架的调用细节,可以右键Call Stack窗口→Show External Code,就能看到完整的调用链,帮你定位更深层的问题 - 要是程序崩溃后VS弹出了异常提示框,直接在提示框里勾选
NullReferenceException的Thrown选项,下次运行就会自动中断在抛出点
内容的提问来源于stack exchange,提问作者Be Kind To New Users




