【问题标题】:C#: Analyze "unsafe" method invokesC#:分析“不安全”的方法调用
【发布时间】:2011-04-20 07:13:48
【问题描述】:

在 VS10 开发人员中(实际使用 ReSharper 等工具)如何找到“不安全”的方法调用 - 即调用,在没有一个安全块(try-catch)中调用堆栈无法实现?

class A
{
    public static vois f()
    {
        try
        {
            ... 
            B.DoSome(); // safe call, exceptions handled
        }
        catch(Exception e)
        {
            ...
        }
    }

    public static void f2()
    {
        ... //no try-catch block
        B.DoSome(); // possible unhandled exception
    }
}

class B
{
    public static void DoSome()
    {
        ...
        //no try-catch block, possible to raise unhandled exception
    }
}

【问题讨论】:

  • 非常模糊,“调用堆栈无法实现”毫无意义。您是在谈论 P/Invoke 吗?
  • 您能否改写一下,以便我们都明白您的意思?
  • 我尝试在源代码中解释问题:snipplr.com/view/41372/c-analyze-unsafe-method-invokes
  • Hans Passant:不,在这个范围内我不是指 P/Invoke,只有 CLR 调用。

标签: c# exception methods call


【解决方案1】:

假设您希望确保您的应用程序不会因未处理的异常而崩溃,这可以通过订阅AppDomainUnhandledException 事件轻松完成。

注意:请按照您的示例建议don't put a try-catch in every method

【讨论】:

  • +1 表示警告。安全的错觉比仅仅缺乏安全更糟糕,因为至少在后一种情况下,你意识到了威胁。
  • 非常感谢,所以现在我认为捕捉 AppDomain 的 UnhandledException 是什么好方法。好办法吗?
  • @Jamon, AppDomain.UnhandledException 让您有机会在应用程序关闭之前采取一些最终操作(例如记录或向用户显示消息框)。它没有为您提供阻止应用程序关闭的方法。拥有作为最终捕获(主要用于日志记录)很重要,但是您期望并知道如何处理的任何异常,您都需要在可以抛出它的地方显式处理。
【解决方案2】:

您的问题很模糊,但也许Exception Hunter 是您所追求的?

【讨论】:

  • 是的,乍一看它就像我想要的那样:) 谢谢。但是,你知道这些东西的免费类似物吗?)
【解决方案3】:

这是一个很棒的微软工具http://stylecop.codeplex.com/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 2015-10-08
    • 1970-01-01
    • 2017-08-31
    相关资源
    最近更新 更多