我最近发现了一个导致NullPointerException的错误。使用标准slf4j语句捕获并记录该异常。下面的节略代码:
for(Action action : actions.getActions()) {
try {
context = action.execute(context);
} catch (Exception e) {
logger.error("...", e);
break;
}
}
如您所见,没有任何幻想。但是,在我们拥有的所有异常日志记录语句中,仅此一条不会打印堆栈跟踪。它仅打印消息(表示为“
…”)和异常类的名称(java.lang.NullPointerException)。
由于对异常的堆栈跟踪是延迟加载的,因此我认为可能存在某种指令重新排序问题,因此决定在log语句之前调用e.getStackTrace()。这没什么区别。
因此,我决定在启用调试代理的情况下重新启动。但是,因为我什至附加了该过程,所以我注意到现在正在打印堆栈跟踪。显然,调试代理的存在导致一些附加的调试信息变得可用。
从那以后,我已经修复了异常的根本原因。但是我想学习为什么没有调试器就无法使用堆栈跟踪。有人知道吗
澄清: 这不是记录问题 。想象一下相同的try / catch子句,但是在catch中,我输出了:
e.getStackTrace().length
如果没有调试器,则打印为“ 0”,而使用调试器,则打印为正数(本例中为9)。
更多信息:这是在JDK 1.6.0_13、64位,amd64,Linux 2.6.9上发生的
这段代码是否可能在内部循环中?然后,JIT编译器可能为此将调用堆栈编译为本机代码,从而丢失了堆栈信息。然后,当您连接调试器时,它将禁用JIT,从而使信息再次可用。
其他手动例外会一直显示信息,因为JIT尚未优化。
从第102行的此类源代码中的注释看来,其他人有时可能会发生这种情况:
http://logging.apache.org/log4j/1.2/xref/org/apache/log4j/spi/LocationInfo.html
在我们的日志文件中,我们发现以下内容: 只有这一行,没有异常堆栈跟踪。 出现此异常的try块正在执行使用javassist创建的动态生成的Java字节码。 我想知道两件事: : null 丢失的堆栈跟踪,尽管在块内使用调用日志挂钩,这通常会导致完整的堆栈跟踪被打印在日志文件中。 我的问题: > 什么样的代码会导致日志输出“java.lang.ArrayIndexOutOfBoundsExcepti
当Xdebug被激活时,只要PHP决定显示通知,警告,错误等,就会显示堆栈跟踪。堆栈跟踪显示的信息以及显示方式可以根据您的需要进行配置。 Xdebug在错误情况下显示的堆栈跟踪信息量相当保守(如果display.errors 在php.ini中设置为On)。这是因为大量的信息会减慢脚本的执行速度和浏览器中堆栈跟踪本身的渲染速度。但是,可以使堆栈轨迹以不同的设置显示更详细的信息。 堆栈跟踪中的变量
我使用以下代码打印try-catch块中发生的任何异常,但是当异常发生时,logback不会打印完整的堆栈跟踪,而是写入一行错误(它没有明确说明是什么导致了它。我如何在logback输出中打印完整的堆栈跟踪? 尝试捕获异常的catch块 日志返回错误输出:
问题内容: 这可能是一个非常幼稚的问题。 我曾经相信Java 中的a 总是 包含堆栈跟踪。这是正确的吗? 现在看起来我捕获了 没有 堆栈跟踪的异常。是否有意义?是否 可以 在没有堆栈跟踪的情况下捕获异常? 问题答案: 无需堆栈跟踪就可以捕获Java中的Throwable对象: 构造一个具有指定详细消息,原因,启用或禁用原因,启用或禁用 可写堆栈跟踪 的新throwable 。 填写执行堆栈跟踪。此
现在看来,我在没有堆栈跟踪的情况下捕获异常。有道理吗?是否有可能在没有堆栈跟踪的情况下捕获异常?
前言我改了标题。很难理解为什么在调试时,有时未被捕获的异常会向Logcat输出“致命异常”,而有时不会。 下面的简化示例在我到达 line 时崩溃了。Logcat 内部没有堆栈跟踪或其他指示,说明出了什么问题。我运行的是 Android Studio 3.0.0beta4。 为什么它会崩溃?(更新-崩溃是由于安全例外) 为什么Logcat不显示堆栈跟踪或其他错误 更新好了,我知道它为什么崩溃了。我