如何诊断Java中的“Unhandled Exceptions”?

时间:2009-11-16 02:43:03

标签: java unhandled-exception

在Java程序中,我目前在程序中的某个点遇到“Unhandled Exception”,我似乎无法确定生成它的位置。

由于程序包含处理发送和接收的无线数据字节的流,因此也难以调试代码。我似乎无法用调试器模拟它。

我应该采用什么策略来找到例外?

5 个答案:

答案 0 :(得分:11)

实施Thread.UncaughtExceptionHandler界面并使用setDefaultUncaughtExceptionHandler()进行设置。

示例程序礼貌。如果你使用多个线程,你也可以在你怀疑是罪魁祸首的线程上设置处理程序。

public class Test {
  public static void main(String args[]) {
      new Test();
  }
  public Test() {
      Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
      // or if a default handler is set you can also use setUncaughtExceptionHandler
      // check the javadocs for the specifics
      throw new RuntimeException ("You can't get me or can you?");
  }
  class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
      public void uncaughtException(Thread t, Throwable e) {
          System.err.println ("Uncaught exception by " + t + " caught:");
          e.printStackTrace();
      }
  }
}

答案 1 :(得分:1)

如果您没有堆栈跟踪,则无法做很多事情。

如果它实际上是在另一方引起的并且您收到此消息,那么您应该向另一方询问堆栈跟踪或类似信息。

修改:您当然应该确保自己的代码不会像以下一样吞噬异常:

} catch (Exception e) {
    // Do nothing.
}

} catch (Exception e) {
    System.out.println("Error");
}

} catch (Exception e) {
    System.out.println(e.toString());
}

要从异常中获取最多信息,您至少应该这样做:

} catch (Exception e) {
    e.printStackTrace();
}

或只是

} catch (Exception e) {
    throw e;
}

希望这有帮助。

答案 2 :(得分:1)

您可以在代码段周围放置一个try-catch(Exception ex)块并移动它/收紧块并让它记录抛出的异常。只要没有太多代码,您就应该能够在几次运行中跟踪它。

答案 3 :(得分:1)

  

但是当我运行程序设备时   显示“未处理的例外”并询问   我是否关闭应用程序。

首先,您需要在代码中找到生成此消息的位置。听起来这个应用程序有GUI或其他什么,所以它可能是某种对话框。

接下来,在代码中找到导致创建消息/对话框的位置。它很可能是

  • try / catch阻止ExceptionThrowable
  • 的阻止
  • UncaughtExceptionHandler

在任何一种情况下,接下来要添加一些代码以使应用程序输出未捕获异常的堆栈跟踪。假设ex拥有对异常对象的引用:

    ex.printStackTrace();

会将堆栈跟踪写入标准错误流;例如“控制台”。 (如果找不到“控制台”输出的位置,有更多的重量级解决方案。)

答案 4 :(得分:1)

听起来你在某处发生了未经检查的RuntimeException。您可以使用try {} catch(Throwable t){t.printStackTrace();在main()方法中轻松尝试它。 }

或者如果您使用像Eclipse这样的IDE远程调试它,您可以将其设置为在Java异常断点上触发调试器,并使用“暂停未捕获的异常”。一些文档here