当前位置: 首页 > 面试题库 >

在printStackTrace()上打印完整的调用堆栈?

勾向文
2023-03-14
问题内容

我需要编写一个小的日志分析器应用程序来处理由我的项目中使用的第三方封闭源库(内部具有自定义记录器)生成的一些日志文件。

如果日志中有异常条目,我需要从堆栈顶部到异常的实际位置收集有关堆栈跟踪中所涉及方法的汇总信息。

不幸的是,默认情况下,Java printStackTrace()不会打印调用堆栈中的每个方法,但是最多可以打印一个特定的数目,其余的仅被引用为16 more...

如果我自己可以捕获到该异常,则可以使用getStackTrace()并自己打印该异常,但是根本不会在该库引发的异常中包含根本原因。

有没有办法让Java在stacktrace中打印整个调用堆栈?

除了我的情况,通用的日志记录框架还可以选择吗?

编辑:程序在带有JDK 1.5.0_09的Sun JVM上运行。没有选择来改变它。


问题答案:

这里是一个解释的“引起”和“… ñ 更多”在印刷迹线。另请参见JavaDoc for
printStackTrace
。您可能没有任何工作要做。

请注意是否存在包含字符“
…”的行。这些行指示此异常的堆栈跟踪的其余部分与由该异常(“封闭”异常)引起的异常的堆栈跟踪的底部指示的帧数匹配。在从捕获“引起性异常”的相同方法引发包装异常的常见情况下,该速记可以大大减少输出的长度。



 类似资料:
  • 问题内容: 我正在寻找一种在PHP中打印调用堆栈的方法。 如果函数刷新IO缓冲区,则奖励积分。 问题答案: 如果要生成回溯,则正在寻找 和/或 。 例如,第一个将为您提供一个像这样的数组 (引用手册) : 它们显然不会刷新I / O缓冲区,但是您可以使用 和/或自己进行操作 。 (请参阅第一个手册页,以了解为什么使用“和/或” ;-))

  • #include<stdio.h> void a(void) { printf("Tail call frame\n"); } void b(void) { a(); } void c(void) { b(); } int main(void) { c(); return 0; } 技巧 当一个函数最后一条指令

  • 问题内容: 每当调用某个函数时,是否有任何方法可以在C或C ++的运行进程中转储调用堆栈?我想到的是这样的: Where的工作方式与Perl 类似。 或类似这样的东西: 在其中放置某种内部断点,该断点将在每次调用时打印堆栈跟踪。 标准的C库中是否存在类似的东西? 我正在使用GCC在Linux上工作。 背景 我有一个测试运行,该行为基于一些不应影响此行为的命令行开关而有所不同。我的代码有一个伪随机数

  • 问题内容: 我想读取捕获的异常的完整堆栈跟踪。 例如: 我想阅读“ … 23更多”,以了解异常的来源。 问题答案: 答案很简单,这些行已经在stacktrace中了:) 基本上,以下情况正在发生:

  • APIService: 在活动调用API中:

  • 下面的函数打印所有的子路径。是否可以只显示完整的路径,即A->B->C(包含以下所需的输出)。