简体   繁体   中英

How do I in java add a stacktrace to my debugging printout

What's the easiest way to print a stacktrace from a debugging printout? Often during testing you would like to know the callstack leading up to the situation provoking a debug message.

If you're using log4j

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

will print the stacktrace to your log.

If you want to save the stack trace into a String you can do this;

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

Where e is, obviously, an exception.

Besides, it sounds very weird to autogenerate an own Exception just to find get a stack trace for a debug. Get Eclipse and use it's debug mode, it's really awesome.

Just creating an arbitrary exception does the trick for me:

System.out.println("Oops, the bad thing happened");
new IllegalStateException().printStackTrace();

除了@jjnguy所说的,如果你没有异常,你也可以调用Thread.getStackTrace()。

To simply print the current stack trace to stderr, you can call:

Thread.dumpStack();

which itself just calls:

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

To output to stdout rather than stderr, pass System.out to printStackTrace() :

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

You should be catching the exception in a try-catch block.

e.getStackTrace();

That returns StackTraceElement[] that you can then interpret.

Also:

e.printStackTrace()

will...print the stacktrace.

Just because I needed it myself:

As inspired by answer How do I find the caller of a method using stacktrace or reflection? , you can retrieve the call stack using

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

Then you process and print/log whatever you are interested in. More work than using Thread.dumpStack() , but more flexible.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM