调试器行为在vs2008和vs2010之间发生变化

时间:2011-08-15 13:16:31

标签: debugging exception invocation

我正在努力应对visual studio 2008和2010调试器之间的行为差​​异。

在2008年,附加了调试器,下面的代码不会停止在对象a中的I的属性设置器上显示未处理的异常。 (菜单选项:调试/异常,用户未处理,选项“抛出”关闭)

try catch块会捕获targetInvocationException,我可以安全地忽略它(在特殊情况下,请注意)。

然而,在vs 2010中,附加调试器的此代码将在尝试设置值I时失败。 (这对我的同事来说很烦人,因为我不希望他们的调试运行突然因此而停止。)

据我所知,我可以选择在类上应用属性“System.Diagnostics.DebuggerNonUserCode”,或者禁用调试选项“仅启用我的代码”。

第一个选项并不是真正可行的选项,因为在现实世界中,会生成A类(包含数百个其他选项) 我无法监督哪些禁用选项“只启用我的代码”将对我们的多个大型解决方案产生影响。

有人可以向我解释为什么禁用我的代码选项会在这里产生影响吗?

提前致谢! ;)

p.s我也尝试在Debug / Exceptions / Common语言运行时异常,system.Reflections中禁用所有反射未处理的选项, 但这似乎没有效果......

- 示例代码 -

using System;
using System.Reflection;

class A
{
    public int I { set { throw new Exception("Sorry, no can do"); } }
}

class Program
{
    static void Main()
    {
        PropertyInfo targetMember = typeof(A).GetProperty("I");

        var a = new A();

        try
        {
            targetMember.SetValue(a, 1, null);
        }
        catch (TargetInvocationException)
        {
            // happy to ignore this, lalala
        }
    }
}

0 个答案:

没有答案