用GDB调试JNI程序

先说点基本的。

 

默认在linux中,出现segment fault时,是不会出现core dump的文件的。需要去更改一下core file size

怎么看core file size了

 

ulimit -a

 

core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) 4
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 7168
virtual memory (kbytes, -v) unlimited

 

更改的时候用ulimit -c 1024,不过我一般直接ulimit -c unlimited

 

这个时候在执行一下程序,会发现当前目录下出现了core文件

gdb 可执行文件名 core

 

gdb:> bt

即可以查看函数出错时候堆栈结构

 

说到JNI,在JNI调用c/c++的库时,通过以上的设置,也会出现core文件,不过由于我们运行的时候是用 java 执行的可执行程序,因此,该怎么用gdb看core dump了。

 

其实很简单,既然是java产生的core,那就用java看好了。

于是

gdb java core

 

gdb:> bt

然后会看到很多 ?()的行,直接忽略,看c/c++的库,会看到什么地方产生了signal,基本就能定位了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值