【问题标题】:Debugging exceptions in type initializers调试类型初始化程序中的异常
【发布时间】:2009-10-22 00:06:30
【问题描述】:

我有一个没有静态构造函数的静态类,但是有很多静态成员。首次使用该类时,我会抛出 TypeInitializationException。

我正在处理 CLR 异常,并且我已禁用“仅我的代码”。

问题是我只有在第一次使用这个类时才会得到这个异常;我不会因为失败的静态字段初始化程序而中断。在找到罪魁祸首之前,我当然可以删除静态成员,但有没有更简单的方法?

有人有调试静态字段初始化的技巧吗?

【问题讨论】:

    标签: c# visual-studio debugging


    【解决方案1】:

    单击“调试”、“异常”(或按 Ctrl+D、E)并告诉 Visual Studio 在引发任何异常时中断。然后它会在引发 InnerException 时中断,在它被包裹在 TypeInitializationException 之前,它会在引发异常的那一行中断。

    或者,查看 InnerException 的调用堆栈并查看它与您的哪个字段匹配。

    或者,尝试在每个静态初始化器上设置断点;最后一个命中是引发异常的那个。

    【讨论】:

    • 我怎么从来不知道这个?
    • 这对我不起作用(VS2010,.Net4)。但我可以看到内部异常详细信息。我认为原因是我正在使用 Assembly.CreateInstance() 实例化一个类型。
    • UPDATE 如果我 disable 'break on throw' 并禁用'just my code',我现在可以打断点了。
    【解决方案2】:

    我会尝试以下方法

    • 仅禁用我的代码:取消选中工具 -> 选项 -> 调试 -> 仅我的代码
    • 打破第一次机会异常:调试 -> 异常 -> 检查抛出的 CLR 异常框

    这应该会将您带到发生异常的直接位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      相关资源
      最近更新 更多