代码之家  ›  专栏  ›  技术社区  ›  Johan Lübcke

如何在Java中添加一个StAdTracle到调试打印输出

  •  11
  • Johan Lübcke  · 技术社区  · 16 年前

    从调试打印输出打印stacktrace最简单的方法是什么?通常,在测试期间,您希望知道引发调试消息的情况的调用堆栈。

    8 回复  |  直到 16 年前
        1
  •  9
  •   Dan Dyer    16 年前
        2
  •  17
  •   Samuel Edwin Ward    12 年前

    如果你用的是log4j

    Exception e = new Exception();
    log.error("error here", e);
    

    将stacktrace打印到日志中。

        3
  •  5
  •   Christoffer    16 年前

    如果要将堆栈跟踪保存到字符串中,可以这样做;

    String exception = "";
    for (StackTraceElement element : e.getStackTrace())
       exception += element.toString() + "\n";
    

    显然,e是一个例外。

    此外,为了找到调试的堆栈跟踪,自动生成自己的异常听起来很奇怪。获取Eclipse并使用它的调试模式,这真的很棒。

        4
  •  4
  •   Johan Lübcke    16 年前

    只需创建一个任意的异常,我就可以做到:

    System.out.println("Oops, the bad thing happened");
    new IllegalStateException().printStackTrace();
    
        5
  •  3
  •   Paul Tomblin    16 年前

    正如@jnguy所说,如果没有异常,也可以调用thread.getStackTrace()。

        6
  •  2
  •   jjnguy Julien Chastang    16 年前

    您应该在try catch块中捕获异常。

    e.getStackTrace();
    

    返回StackTraceElement[],然后您可以解释它。

    也:

    e.printStackTrace()
    

    将…打印stacktrace。

        7
  •  1
  •   Community T.Woody    7 年前

    只是因为我自己需要它:

    从回答中得到启发 How do I find the caller of a method using stacktrace or reflection? ,您可以使用

    StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()
    

    然后处理并打印/记录您感兴趣的内容。比使用更多的工作 Thread.dumpStack() ,但更灵活。

        8
  •  1
  •   minipif    8 年前

    要简单地将当前堆栈跟踪打印到stderr,可以调用:

    Thread.dumpStack();
    

    它本身就叫做:

    new Exception("Stack trace").printStackTrace();
    

    输出到 标准输出 而不是stderr,pass System.out printStackTrace() :

    new Exception("Stack trace").printStackTrace(System.out);