java调用C++库崩溃排查

java调用C++库崩溃排查

问题:java通过JNI方式调用C++库文件,运行时崩溃

1.首先生成core文件/或者gdb attach到进程上

//不限制core文件大小
ulimit -c unlimited
//core文件带pid和进程名 core在当前目录
echo "core_%e_%p" > /proc/sys/kernel/core_pattern

2.gdb查看core文件崩溃位置,可以看到是什么原因导致的崩溃,但是看不见堆栈

具体使用:gdb -c core-java-2853 -e java
结果:
Program received signal SIGSEGV, Segmentation fault.
(gdb) bt
#0  0x00007f19191429cf in ?? ()
#1  0x00000007c5922548 in ?? ()
#2  0x00000000000000b2 in ?? ()
#3  0x0000000000000000 in ?? ()
2.1 若是C++库的崩溃,怎可以看见崩溃的堆栈,要是java的崩溃怎看不见调用栈。

java崩溃看不见堆栈的原因:gdb调试的是java,Java里面是不会包括你写的程序的符号表了(因为符号表存储在自己写的Java程序中)。因为在java中没有读取到符号表,函数名、变量名这些都是存储在符号表中的,没有了符号表函数名自然无法解析了。那为什么不直接用GDB调试自己写的java程序呢?因为java程序只能在jvm上跑&#x

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值