0

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

4

3 回答 3

2

这是官方的完成方式(grepcode格式):

646   private  void printStackTrace( PrintStreamOrWriter s) { 
647 // 防止恶意覆盖 Throwable.equals
648 // 使用具有身份相等语义的 Set。
649 Set < Throwable > dejaVu =
650 Collections。newSetFromMap ( new IdentityHashMap < Throwable , Boolean >());
651 似曾相识。添加这个);
653 同步s.lock()){
654 // 打印我们的堆栈跟踪
655 秒。println (这个);
656 StackTraceElement [] trace = getOurStackTrace ();
657 for ( StackTraceElement traceElement : trace)
658 秒。println ("\tat " + traceElement);
660 // 打印抑制的异常,如果有的话
661 for ( Throwable se : getSuppressed ())
662 se. printEnclosedStackTrace (s, trace, SUPPRESSED_CAPTION, "\t", dejaVu);
664 // 打印原因,如果有的话
665 Throwable ourCause = getCause (); 第
666667_ printEnclosedStackTrace (s, trace, CAUSE_CAPTION, "", dejaVu); 668 } 669 }




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

于 2014-02-11T15:15:17.907 回答
1

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;
}
于 2014-02-11T14:56:20.227 回答
1

如果您想随时获取堆栈跟踪,可以尝试以下操作:

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

或者如果您只想在异常情况下获取堆栈跟踪,只需ExceptionUtilsapache common库中使用。

ExceptionUtils.getFullStackTrace(ex);
于 2014-02-11T14:54:33.763 回答