我正在尝试调试 JNI 代码。为此,我遵循了将 gdb 附加到运行我的 Java 代码的 Java 进程的想法。
问题是当我这样做时,gdb 在 libjli.so
内的 pthread_join()
处挂起,产生以下输出。
0x7fff59850000
0x00007ffa9fbb8218 in pthread_join ()
from /lib/x86_64-linux-gnu/libpthread.so.0
然后我无法让我的 Java 代码处理请求(它是一个服务器)。
更新:它不在pthread_join()
内部,而是在那之后,当我继续执行并向服务器发出请求时。它实际上使用 libzmq.so
进行通信。我不知道 gdb 是否以某种方式干扰了库。
最佳答案
终于知道是怎么回事了。 Java 在垃圾回收期间使用 SIGSEGV,它被 gdb 拦截,导致明显的崩溃。为了解决这个问题,我将 handle SIGSEGV pass nostop
添加到我的 ~/.gdbinit
文件中。
关于java - 附加到 Java 进程时 gdb 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19226153/