【问题标题】:How do I find out what originally caused an exception, if it gets thrown from Microsoft's code?如果异常是从 Microsoft 的代码中抛出的,我如何找出最初导致异常的原因?
【发布时间】:2009-03-26 11:42:39
【问题描述】:
我在DockPanel 的不同窗格中有两个包含DataGridViews 的控件。如果一个处于编辑模式并且我切换窗格,我会从DataGridView 的EndEdit() 方法中得到一个NullReferenceException。堆栈跟踪不会比这更深,并且异常不包含更多信息。
我在反射器中查看了该方法,但看不到任何明显为空的内容。我怀疑问题实际上出在我的代码中,但异常是从 Microsoft 的代码中重新抛出的,并且正在重置堆栈跟踪。如何找出最初导致异常的原因?
【问题讨论】:
标签:
c#
.net
exception
datagridview
dockpanel
【解决方案1】:
如果您怀疑 MS 代码中存在错误,您可以从符号服务器下载调试符号,加载它们并在调试时跟踪它? Like so.
请注意,这些符号受各种许可之一的约束。如果(例如)您从事“单一”贡献等工作,这可能会影响您。
【解决方案2】:
您是否查看过 InnerException 属性?
【解决方案3】:
按照说明设置 MS symbol server 和 source server1。将调试器设置为在抛出 NullReferenceException 时中断。然后,您将获得用于调试的完整源代码,或者至少获得完整的堆栈跟踪。
1 注意,列出的 QFE 包含在 SP1 中。