【问题标题】:Avoid breaking on generated code避免破坏生成的代码
【发布时间】:2012-10-04 16:03:20
【问题描述】:

我正在使用一些外部代码,当使用某些参数调用这些代码时会引发可以忽略的异常。不幸的是,由于各种原因,我无法更改此外部代码。

我创建了一个看起来像这样的包装方法:

    [DebuggerStepThrough]
    public static bool TryGetXXX(string input, out string output)
    {
        try
        {
            output = MethodThatSometimesFails(input);
            return true;
        }
        catch
        {
            output = null;
            return false;
        }
    }

    private static string MethodThatSometimesFails(string input)
    {
        // Don't want this to cause a break
        // but can not put the attribute on this method
        throw new Exception("couldnt deal with your request");
    }

不幸的是,外部代码仍然会在MethodThatSometimesFails 内的异常处中断。 [DebuggerStepThrough] 只会避免调试上面的代码,但是被调用的代码还是会抛出。

我想要的是,即使选中“异常...”窗口上的所有复选框,代码也能运行。有没有可以做到这一点的属性?

如果没有属性,我可以创建一个包含这些类/方法的项目并排除整个项目。有没有办法做到这一点?

【问题讨论】:

  • 工具->Optoins->调试->当异常跨 AppDomain 设置时中断? social.msdn.microsoft.com/Forums/en-US/csharpide/thread/…
  • 你得到这个是因为调试器配置设置:调试+异常,抛出复选框。除了取消选中该复选框之外,您无能为力。
  • 我希望抛出此方法之外的其他异常并让我看到它们,所以我想不取消选中抛出的复选框是这个问题的目的。作为一名开发人员,我总是想知道我的部分代码中的异常是否在开发阶段被抛出。错误的类型是 ApplicationException,所以我必须通过取消选中它来限制它。

标签: c# .net attributes visual-studio-debugging


【解决方案1】:

尝试用DebuggerNonUserCodeAttribute标记方法或类

【讨论】:

  • 在工具 -> 选项 -> 调试 -> 常规 -> 启用我的代码中检查 Visual Studio 中选项的状态
【解决方案2】:

如果您知道有效参数是什么,请在调用函数之前检查它们。如果它们无效,请不要调用该函数。

尽量保持乐观并消除对异常的依赖,这可能会带来高昂的代价。

【讨论】:

  • 我的理解是 OP 不能那样做。他正在努力应对这种需要他容忍例外的情况。
  • @usr 我的意思是在TryGet... 方法中。
  • 感谢 Daniel,不幸的是,有一个通过此方法调用的整个库,库的工作是知道什么是有效的,什么是无效的。不幸的是,他们没有提供 TryGet。
  • 就不能避免一些常见的情况吗?
  • 案例是什么,这在很大程度上取决于图书馆。
【解决方案3】:

找不到解决方案。最后唯一的选择就是把 TryGet 放到另一个 DLL 中!

【讨论】:

    猜你喜欢
    • 2016-03-07
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 2020-02-29
    • 1970-01-01
    相关资源
    最近更新 更多