如何收集有关例外的信息?

时间:2017-08-01 09:43:45

标签: java debugging

由于我在维护团队的项目中工作,我经常处理相同的异常,这些异常经常发生(在同一个地方),但堆栈跟踪中的信息量不足。这导致的情况是,即使我经常对他们无能为力,因为原因不明。

所以我想知道是否有一些工具可以收集更多关于上下文的信息(可能是通过某种方式连接JVM)。

这是我应该使用这些人的地方: jinfo,jhat,jmap,jsadebugd,jstack?

或许还有一些更方便/更强大/(称之为)的方式?

我期待的是什么:

  • 转储变量的值(在调用的方法中,如果可能,在堆栈跟踪中的其他方法中)
  • 解决方案本身不会改变代码
  • 检查是否在发生异常之前调用了其他一些已定义的方法

1 个答案:

答案 0 :(得分:1)

堆栈跟踪为您提供发生问题的确切代码行以及(希望)有用的消息来解释问题,足以识别问题。

通常,如果不是,最好的办法是修改有问题的区域中的代码,以便为您提供更多信息。这可能是在发生异常的行之前记录变量的状态,在所有情况下(不仅在发生异常时),或者增加异常发生时提供的信息量。

或者,如果发生异常的行上发生了多个事情,您可以将代码分成多行,这将导致所有后续异常中的行号更有用,例如,如果你有这样一句话:

Foo myFoo = myBar.getBaz().getFoo();

并且您在该行上获得NullPointerException,您可能无法确定myBar是否为空,或者其getBaz()方法是否返回null。如果你把它分成:

Baz myBaz = myBar.getBaz();
Foo myFoo = myBaz.getFoo();

下次遇到相同的NullPointerException时,行号将为您提供更好的线索,了解什么是null。