用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,基本就能定位了。

你可能感兴趣的:(java,jni,java,file,signal,bt,linux)