跟踪"隐藏"异常

zak*_*mck 4 java debugging exception

我正在检查我的程序的输出,我不时会看到像"java.lang.NullPointerException"这样的消息,而不是别的.因为这不是来自我的代码,我很确定,有一些第三方库,其中一些混蛋做了类似的东西:catch(ex){println ex.getMessage()}.

有没有办法重新启用堆栈跟踪报告并查看问题发生的位置?通过调试器+逐步执行来实现这一点并不容易,因为当我在大量输入数据上运行程序时问题是随机发生的,而如果我尝试重新运行,则无法重现它看起来很内疚的数据切片.

提前致谢!

Boz*_*zho 5

更新:您最好使用您发现的IDE断点.

否则,您可以设置自定义PrintStream通道System.setOut(..),在那里,无论何时打印,也打印Thread.currentThread().getStackTrace()

理想情况下,您PrintStream应该将原始包裹System.out并发送给它.就像是:

public class PrintStreamWrapper extends PrintStream {
    public PrintStreamWrapper(OutputStream out) {
       super(out);
    }

    public void println(String x) {
         StackTraceElement[] trace = Thread.currentThread().getStackTrace();
         // print everything, but not to the System.out, 
         // because you'll end up in a loop.
         super.println(x);
    }   
}
Run Code Online (Sandbox Code Playgroud)

然后,在您的计划开始时:

System.setOut(new PrintStreamWrapper(System.out));
Run Code Online (Sandbox Code Playgroud)