仅在java中的调试模式下抛出异常

时间:2012-02-23 13:18:13

标签: java debugging exception

我想避免在发布时出现崩溃,即使出现问题。这就是为什么我不想抛出我知道不会被处理的异常。 在调试模式下,我想这样做,因为在调试过程中出现错误时,尽可能多地获取噪声。

问题在于,如果我做了类似的事情:

if(DEBUG_MODE)抛出e;

然后我需要指定该方法抛出一个异常,但我不想这样做,因为在发布中不是这样。

处理此问题的最佳方法是什么?

修改

PS

我的问题不清楚抱歉。

在我的情况下断言并不是很方便。问题是我已经知道出了什么问题,所以我没有任何要断言的东西。为了更清楚,我有意想不到的例外。当然你可以说:编写代码不要有意外的异常。但是如果出现问题,我不希望应用程序崩溃。现在我添加了一个这样的函数:

public static void unexpectedException(String string, Exception e) {
    if (Build.DEBUG) {
        MyApp.errorLog(string);
        throw new RuntimeException(e);
    } else
        MyApp.errorLog(string, e);
}

尽管你的所有答案都是正确的,我会选择一个比我做的更接近的答案

PS2

断言不太方便的另一种情况是当你实现像state这样的模式时。如果对某些州,你期望一种方法永远不会被召唤......

5 个答案:

答案 0 :(得分:4)

您可以使用断言。

public void methodSomething(Object o){

   assert (o != null);  // will throw AssertionError during development

   ...

}

但你真的应该抓住这些例外并处理它们(:

答案 1 :(得分:4)

如果你不想像你真的那样使用断言,你可以从RuntimeException派生你的例外。然后,您不必在方法标题中将它们声明为throws

话虽如此,你应该真正看看断言,或者正如其他回复所说的那样,一个适当的日志框架。

答案 2 :(得分:3)

不要 EVER 这样做! 应在您的应用程序中始终处理异常。使用日志记录机制来跟踪系统的行为方式,而不是将异常提升到应用程序接口层。

答案 3 :(得分:2)

我建议使用模式和一些机制。基本上创建某种ErrorHandler

public interface ErrorHandler {
    void handleError(Throwable t);
}

并提供一些实现: NoOpErrorHandler RethrowingErrorHandlerLoggingErrorHandler。根据environemnt使用最适合您的那个。

但请至少记录例外情况!

答案 4 :(得分:0)

您可以记录此类例外

if(LOGGER.isDebugEnabled())
    LOGGER.log(Level.DEBUG, "What went wrong", e);

这允许您在开发中打开这些消息并在生产中将其关闭。

相关问题