【问题标题】:Difference between dumpstack() and printStackTrace()dumpstack() 和 printStackTrace() 之间的区别
【发布时间】:2014-07-02 21:28:22
【问题描述】:

我正在尝试获取从 android Java 应用程序代码调用并尝试使用的底层 C 代码的堆栈跟踪 dumpStack() 和 printStackTrace() 没有任何成功。 只是好奇这两者之间是否有区别?

另外有没有办法打印底层C代码的堆栈跟踪,使用JNI调用android端的java函数?

【问题讨论】:

  • 一个区别是你可以随时调用dumpStack(),而printStackTrace()来自Throwable,这意味着你只有在引用了Throwable时才能调用它。
  • 好吧,我已经能够使用 Thread.currentThread().printStackTrace() 而不引用 Throwable 并且基本上可以从任何地方调用它。
  • 不,你没有。没有这样的方法。有 Thread.dumpStack() 和 Throwable.printStackTrace()。
  • stackoverflow.com/questions/1069066/… 而不是使用 get 我能够成功使用 print 并能够在我的 Logcat 上打印出堆栈跟踪
  • 那是 Thread.getStackTrace()。不是你上面所说的 Thread.printStackTrace()。

标签: java android debugging stack-trace backtrace


【解决方案1】:

Thread.dumpStack() 转储调用它的线程的当前堆栈跟踪。

Throwable.printStackTrace() 打印堆栈跟踪就像抛出 throwable 时一样。

【讨论】:

    【解决方案2】:

    使用 dumpStack() 和 printStackTrace() 的主要区别在于 Stack 中的第一个条目,在 dumpStack() 的情况下,第一个条目始终是 java.lang.Thread.dumpStack(),而在后面的情况下,它是您使用的方法打印的堆栈跟踪。如果您不想打印堆栈跟踪,而是希望在 Java 程序中使用它,您可以使用 Thread 类的 getStackTrace() 方法。此方法返回一个 StackTraceElement 数组。在下面的 Java 程序中,我们将看到所有三种方法的示例,以获取 Java 中当前线程的堆栈跟踪。

    【讨论】:

    • 没有。 Throwable.printStackTrace() 中的第一行是引发异常的行。它根本不一定是您调用 printStackTrace() 的方法中的一行。
    猜你喜欢
    • 2012-04-24
    • 1970-01-01
    • 2021-12-25
    • 2020-05-10
    • 2014-09-20
    • 2010-10-28
    • 2015-10-04
    • 2012-08-12
    • 2011-02-18
    相关资源
    最近更新 更多