创建没有堆栈跟踪的 NPE
Create NPE without stacktrace
在 OS X 10.11 上,我们应用程序的用户遇到了几个没有堆栈跟踪的 NPE(请参阅 this Whosebug 问题)。我现在想自己创建一个来调试我们在这种情况下的错误处理。
如何防止创建堆栈跟踪?
其实就是这么简单:
final NullPointerException npe = new NullPointerException();
npe.setStackTrace(new StackTraceElement[0]);
throw npe;
如链接 post 中所述,当相同的代码足够频繁地导致相同的异常时,就会发生优化。因此,一种方法是循环你的异常抛出和错误处理代码足够多次以开始看到优化。
或者您可以尝试这样的 hack:
try {
throw new NullPointerException("fake");
} catch (NullPointerException e)
e.setStackTrace(new StackTraceElement[0]);
throw e;
}
在 OS X 10.11 上,我们应用程序的用户遇到了几个没有堆栈跟踪的 NPE(请参阅 this Whosebug 问题)。我现在想自己创建一个来调试我们在这种情况下的错误处理。
如何防止创建堆栈跟踪?
其实就是这么简单:
final NullPointerException npe = new NullPointerException();
npe.setStackTrace(new StackTraceElement[0]);
throw npe;
如链接 post 中所述,当相同的代码足够频繁地导致相同的异常时,就会发生优化。因此,一种方法是循环你的异常抛出和错误处理代码足够多次以开始看到优化。
或者您可以尝试这样的 hack:
try {
throw new NullPointerException("fake");
} catch (NullPointerException e)
e.setStackTrace(new StackTraceElement[0]);
throw e;
}