2

我正在尝试调试 libgdx 应用程序...显然,我在某些时候会产生 NullPointerException,但 libgdx 有一个巨大的 try-catch 语句来捕获我的原始异常:

        public void run () {
            graphics.setVSync(graphics.config.vSyncEnabled);
            try {
                LwjglApplication.this.mainLoop();
            } catch (Throwable t) {
                if (audio != null) audio.dispose();
                if (t instanceof RuntimeException)
                    throw (RuntimeException)t;
                else
                    throw new GdxRuntimeException(t);
            }
        }

因此调试器在抛出 (Gdx)RuntimeException 的 catch 语句中停止。我知道 t 包含原始异常,但我真的不知道它来自哪里。有什么办法可以打破产生该异常的行吗?

4

3 回答 3

0

这是有效的解决方案:将 t 中显示的异常添加到应始终触发调试器的异常列表中,即使被捕获也是如此:

抛出异常时中断

不过感谢您的帮助:)

于 2013-08-30T11:33:22.710 回答
0

检查堆栈跟踪并在生成的位置插入断点怎么NullPointerException样?

于 2013-08-28T06:51:51.367 回答
0

未经测试,libgdx但在类似的系统中,您也许可以做到……</p>

try {
    foo.run () 
} catch (RuntimeException t) {
    System.err.println ("** Caught a runtime exception.");
    t.printStackTrace();
    Throwable tCause = t;
    while (tCause = tCause.getCause()) {
         System.err.println("→ caused by:");
         t.getCause.printStackTrace ();
    }
}

看起来GdxException.GdxException (Throwable)应该调用super (t)which 反过来应该“隐藏”tgetCause访问者的属性中。

PS:您是否尝试过运行像 FindBugs 这样的静态分析器来定位潜在的 NPE?

于 2013-08-27T14:41:12.340 回答