我试图获取从android Java应用代码调用的底层C代码的堆栈跟踪,并尝试使用dumpStack()和printStackTrace(),但没有成功。我很好奇,这两者之间有什么区别吗?还有是否有一种方法可以打印底层C代码的堆栈跟踪,这些代码使用JNI来调用Android端的Java函数?
muk1a3rh1#
Thread.dumpStack()转储调用它的线程的 * 当前 * 堆栈跟踪。Throwable.printStackTrace()打印堆栈跟踪 ,就像抛出throwable时一样。
Thread.dumpStack()
Throwable.printStackTrace()
zbsbpyhn2#
使用dumpStack()和printStackTrace()的主要区别是Stack中的第一个条目,在dumpStack()的情况下,第一个条目总是java.lang.Thread.dumpStack(),而在后面的情况下,它是打印堆栈跟踪的方法。如果你不想打印堆栈跟踪,而是想在Java程序中打印,你可以使用Thread类中的getStackTrace()方法。此方法返回StackTraceElement数组。在下面的Java程序中,我们将看到所有三种方法的示例,以获取Java中当前线程的堆栈跟踪。
2条答案
按热度按时间muk1a3rh1#
Thread.dumpStack()
转储调用它的线程的 * 当前 * 堆栈跟踪。Throwable.printStackTrace()
打印堆栈跟踪 ,就像抛出throwable时一样。zbsbpyhn2#
使用dumpStack()和printStackTrace()的主要区别是Stack中的第一个条目,在dumpStack()的情况下,第一个条目总是java.lang.Thread.dumpStack(),而在后面的情况下,它是打印堆栈跟踪的方法。如果你不想打印堆栈跟踪,而是想在Java程序中打印,你可以使用Thread类中的getStackTrace()方法。此方法返回StackTraceElement数组。在下面的Java程序中,我们将看到所有三种方法的示例,以获取Java中当前线程的堆栈跟踪。