如何使用gdb调试Java程序?

问题描述 投票:0回答:4

当 gdb 在 Java 中用于调试目的时:

  • 它的实际用途是什么?
  • 它有什么局限性?
  • 与其他调试器相比如何?
java debugging gdb
4个回答
16
投票

我想说,当程序员来自不同的语言并且已经熟悉 gdb 时,gdb 用于调试 Java。否则,考虑到 Java 有更流行的替代品:jdbJSwateclipsenetbeans 等,这似乎是一个奇怪的选择。

这里有一个使用 gdb 调试 Java 的

教程


4
投票
GDB 99% 的时间对于调试 Java 没有用处,但它可以帮助您找到 Java 调试器无法找到的本机内存泄漏。


1
投票

gdb 对于快速进行堆转储很有用。

通常人们会使用

jmap 或类似工具转储堆。但使用此工具时,JVM 在转储之前执行垃圾收集,这可能会在挂起的进程上花费数小时。通过以下步骤,您可以快速转储,重新启动进程并随后转换转储。

gdb --pid <PID> gcore /tmp/gdbdump.core detach quit
之后需要将 core 文件转换为 hprof 文件,以便使用 Java 工具进行分析:

jmap -dump:format=b,file=/tmp/javadump.hprof /path/tojdk/java /tmp/gdbdump.core

请注意:

    您需要使用与进程运行时使用的 JRE/JDK 版本相同的 JDK 版本。
  1. 转换可能需要几个小时。
  2. 对于Windows:似乎有类似的过程:
  3. https://stackoverflow.com/a/35822193/4248273

0
投票
GDB可以在java程序中使用来调试/跟踪JNI(java本机接口)。 JNI 通常用于访问共享库中的代码。我们可以在共享库中放置断点,当jvm执行JNI方法时可以触发断点

© www.soinside.com 2019 - 2024. All rights reserved.