问题标签 [printstacktrace]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 为什么 printStackTrace() 和其他方法之间的执行顺序似乎是不确定的?
在我下面的代码片段中,该printStackTrace()
方法在catch block
. 运行程序后可以看到有时会printStackTrace()
连续运行多次,而不是按照printStackTrace()
--> catch block
-->的顺序运行finally block
。
如果更改为static boolean b
,false
则按System.out.print(e)
顺序执行。
那么为什么会有printStackTrace()
不同的行为方式呢?(线程的东西??)
java - 将调用者线程的堆栈跟踪附加到正在创建的新线程中,以便于调试
我在调试时经常遇到问题。
有时线程结束时会抛出异常。
这个问题的原因是线程的调用者/启动者。
调用者发送不正确的参数或调用线程而不初始化某些东西。
为了找到调用特定线程的位置,需要付出一些额外的努力,因为堆栈跟踪是无用的。
如果我们可以将调用者线程的堆栈跟踪附加到被调用线程中会怎样。
考虑以下示例:
输出
期望的输出
编辑:这是与@peter-lawrey 讨论后获得的解决方案
java - Java:Executor、FutureTask、Unsafe.unpark - 如何防止 printStackTrace?
在 Java 中,我使用 FutureTask 通过 Executor 异步运行 Callable。为了检查调用线程是否发生错误,我需要从 Callable 中抛出潜在的异常。但是,这会导致堆栈跟踪打印到 System.out(我已调试,这发生在 LockSupport.unpark(Thread) 的 Unsafe.unpark(Thread) 内部)。
有什么想法可以防止这种情况吗?
我之前(通过 SLF4J)已经将异常记录到真正的记录器中,并且从不希望在 System.out 上直接堆栈跟踪。
更新:我想我已经指出了相关信息,但要澄清所有问题:这个测试用例可以重现问题(方法 testTransferStreamAsyncCallbackFail()): https ://github.com/mmm/util/blob/master/io/ src/test/java/net/sf/mmm/util/io/base/StreamUtilTest.java
使用的实现是这样的:
我通过 eniter 代码进行了调试,它绝对不是我的代码记录到控制台。正如我试图解释的那样,这是在 JDK 中完成的。
附加更新以回答问题:
我正在使用的执行器是 Executors.defaultThreadFactory() 正如您在此处看到的: https ://github.com/mmm/util/blob/master/core/src/main/java/net/sf/mmm/util/concurrent /base/SimpleExecutor.java#L30 https://github.com/mmm/util/blob/master/io/src/main/java/net/sf/mmm/util/io/base/StreamUtilImpl.java#L165
输出是我在测试中从 Callable 中抛出的异常的堆栈跟踪:
java - 为什么一些堆栈跟踪在java中没有行号
我有一个来自客户的错误,当我查看日志时,我们跟踪异常,一些堆栈跟踪没有行号:
请注意:我已将包名称替换为“xx”),并且所有类和方法都在我们的应用程序中定义:
完整的堆栈跟踪如下:
我对为什么会发生这种情况感兴趣?我的客户是否有可能对现有代码(自定义)做一些事情?
java - 我们应该记录托管异常的堆栈跟踪吗?
我对这个主题进行了很多研究,但没有找到真正的答案。
尝试想象一个执行多线程调用 Callable 的程序。为此,我们启动一个具有特定超时的 ExecutorService 来调用所有进程。
所以我们有一个带有多个异常的 try...catch 块:
- CancellationException 超时
- ExecutionException 如果在线程中引发异常
- 突然停止的 InterruptedException...
哲学是只记录消息,还是记录消息和可抛出的(所以堆栈跟踪)?
总结一下,我们应该这样做:
还是只记录消息错误?
stacktrace 是否被认为只出现在错误中?
谢谢你。
log4j - 调用 Logger.error(String, Throwable) 时的 EasyMock AssertionError
当我在调用 Log4j.error 方法时包含一个 Throwable 时,我看到了断言错误。我在@PreparateForTest 块中有Logger.class、PrintWriter.class、AuthenticationException.class。如果我没有将 Throwable 作为参数传递,我看不到错误。
我在正确设置模拟时缺少什么?
JUnit 测试代码片段如下:
导致问题的代码片段如下:
java - 有没有办法在重定向到错误页面(在 Java 中)之前捕获错误的堆栈跟踪?
当我的 Spring MVC 应用程序发生错误时,我想发送一封电子邮件,其中包含导致错误的代码的堆栈跟踪。
我正在使用@ControllerAdvice
and@ExceptionHandler
注释重定向到一个方法,该方法将输出异常的堆栈跟踪并通过电子邮件发送该信息。但是,堆栈跟踪信息是针对在错误处理程序中执行的代码,而不是来自导致错误的代码。
这是错误处理程序中输出堆栈跟踪等的代码。
这将导致以下输出:
但我希望这个输出(这是控制台中显示的内容):
javascript - 没有在角度控制器内的 IE 中获取 javascript exception.stack
我正在构建一个有角度的 Web 应用程序,我想将任何 javascript 异常和调用堆栈从客户端发送到服务器以进行日志记录。在 chrome 和 firefox 中,我可以通过查看 exception.stack 属性来获取调用堆栈,但是在使用 IE 时该值不可用。这是我的角度控制器的代码示例:
这是来自 chrome 的 exception.stack:
这对调试很有帮助。但是当错误发生在角度控制器内部时,IE 没有 extension.stack 属性。
但是,如果我在 IE 不在角度控制器内时强制执行相同的错误,那么 exception.stack 会有一个值。这是该代码的示例:
在 IE 中,exception.trace 如下:
我也尝试使用 stacktrace.js 从 IE 获取调用堆栈,但是这个库依赖于存在的 exception.stack 值。
有人可以帮我理解为什么在角度控制器内部时这会有所不同,以及如何从角度控制器内部的 IE 获取堆栈跟踪?
谢谢
exception - printStackTrace() 的奇怪行为
printStackTrace()
就好像它在等待输入后在自己的线程中运行一样。这是我的代码:
我有时会得到预期的输出(STUFF
最后是),但有时我会得到这个:
有时是这样的:
更换扫描仪System.in.read()
产生相同的结果。完全删除这条线会产生预期的结果。在我注意到这个问题的实际程序中,堆栈跟踪要长得多,并且STUFF
输出总是按预期出现或出现在上面的第二个输出中 - 在第二行的开头。
这是什么原因造成的,我该如何解决?
java - 与 Android 中的 e.printStackTrace() 混淆
我在这里读到不e.printStackTrace()
应该用于在 android 上捕获异常。
在另一个来源我读到我应该使用Log.e()
而不是e.printStackTrace()
:
我是否必须在发布版本中手动删除这些调用?在 Android 中跟踪异常日志的最佳做法是什么?