【问题标题】:Mimic printStackTrace() method in java [closed]在java中模仿printStackTrace()方法[关闭]
【发布时间】:2014-03-09 10:05:20
【问题描述】:

我的问题是否有任何方法可以实现类似于 printStackTrace() 的方法 我确实不知道如何开始这样做,这可能吗? 是getStackTrace() 对我来说是个不错的选择。

【问题讨论】:

  • 我相信社区决定是否投票赞成/反对,而不是 OP。
  • Sysout getStackTrace()的每个条目?
  • 这个问题似乎是题外话,因为 OP 没有表现出任何努力。
  • 我是反对者。我认为必须需要时投反对票。通过这种方式,您可以了解应该在这里提出哪些问题以及将来如何改进这些问题。在解释时,反对票就像赞成票一样好。
  • 如果你想重新发明一个轮子,看看轮子,看看它是如何工作的。你肯定有你的 JDK 的源代码。如果你有一个目标,这会给你的问题一个目的,你应该这么说。而且,正如 Ruricha 所说,您应该先尝试一下自己。 SO 是问答,而不是教程。

标签: java exception printstacktrace


【解决方案1】:

这里是官方的做法(grepcode格式):

646 private void printStackTrace(PrintStreamOrWriter s) {
647 // 防止恶意覆盖 Throwable.equals by
648 // 使用具有标识相等语义的 Set。
649 SetThrowable> dejaVu =
650 Collections.newSetFromMap(new @ 987654331@Throwable, Boolean>());
651dejaVu.add(this);
653同步 (s.lock()) {
654 // 打印我们的堆栈跟踪
655 s.println(this);
@987654341 @StackTraceElement[] trace = getOurStackTrace();
657for (StackTraceElementtraceElement:trace)
658s.println("\ tat " + traceElement);
660 // 打印抑制的异常,如果有的话
661 for (Throwable se : getSuppressed())
@ 987654352@ se.printEnclosedStackTrace(s, 跟踪, SUPPRESSED_CAPTION, "\ t", dejaVu);
664 // 打印原因,如果有的话
665 ThrowableourCause = getCause();
666 如果 (ourCause != null)
667ourCause.printEnclosedStackTrace(s, trace, CAUSE_CAPTION, "", dejaVu);
668 }
669 }

处理的问题比您预期的要多,但您可以轻松删除任何您不关心的问题。

【讨论】:

    【解决方案2】:

    如果你想随时获取堆栈跟踪,你可以试试这个:

    Thread.currentThread().getStackTrace();// this return an array of StackTraceElement loop over in order to print them.
    

    或者如果您只是想在异常情况下获取堆栈跟踪,只需使用来自apache common 库的ExceptionUtils

    ExceptionUtils.getFullStackTrace(ex);
    

    【讨论】:

      【解决方案3】:

      您可以在 Throwable 类的帮助下完成。请参阅下面的代码:
      该方法返回堆栈跟踪。

      public String tracePoint()
      {
          String trace = "";
          Throwable t = new Throwable();
          StackTraceElement[] s = t.getStackTrace();
          for(int i=0; i<s.length; i++)
          {
              trace += s[i] + "\n";
          }
          return trace;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-02-03
        • 1970-01-01
        • 2017-09-19
        • 2010-12-02
        • 1970-01-01
        • 1970-01-01
        • 2014-02-18
        • 2016-10-15
        相关资源
        最近更新 更多