我正在尝试调试JNI代码。为此,我遵循将gdb附加到运行Java代码的java进程的想法。
问题是,当我这样做时,gdb在pthread_join()
libjli.so
内挂起,产生以下输出。
0x7fff59850000
0x00007ffa9fbb8218 in pthread_join ()
from /lib/x86_64-linux-gnu/libpthread.so.0
然后我不能让我的Java代码处理请求(它是服务器)。
更新:它不在pthread_join()
内,但在此之后,当我继续执行并向服务器发出请求时。它实际上使用libzmq.so
进行通信。我不知道gdb是否会以某种方式干扰库。
答案 0 :(得分:3)
终于找到了发生了什么。 Java在垃圾收集期间使用SIGSEGV,它被gdb截获,导致明显崩溃。为解决此问题,我将handle SIGSEGV pass nostop
添加到了~/.gdbinit
文件中。
答案 1 :(得分:0)
此外,您可以在调用“run”命令之前在gdb会话中使用这两个命令:
处理SIGSEGV nostop
处理SIGSEGV noprint