例如,一个程序cmm_test_tool在运行的时候发生了错误,并生成了一个core文件,如下:
-rw-r–r– 1 root cmm_test_tool.c
-rw-r–r–孙辩 1 root
cmm_test_tool.o
-rwxr-xr-x 1 root cmm_test_tool
-rw--- 1 root
core.19344
-rw--- 1 root core.19351
-rw-r–r– 1 root
cmm_test_tool.cfg
-rw-r–r– 1 root cmm_test_tool.res
-rw-r–r– 1 root
cmm_test_tool.log
[root@AUTOTEST_SIM2 mam2cm]#
就可以利用命令gdb进行查找,参数一是应用程序的名称,参数二是core文件,运行
gdb
cmm_test_tool core.19344结果如下:
[root@AUTOTEST_SIM2 mam2cm]# gdb cmm_test_tool core.19344
GNU gdb Red Hat
Linux (5.2.1-4)
Copyright 2002 Free Software Foundation, Inc.
GDB is free
software, covered by the GNU General Public License, and you are
welcome to
change it and/or distribute copies of it under certain conditions.
Type “show
copying”启瞎 to see the conditions.
There is absolutely no warranty for GDB. Type
“show warranty” for details.
This GDB was configured as
“i386-redhat-linux”…
Core was generated by `./cmm_test_tool’.
Program
terminated with signal 11, Segmentation fault.
Reading symbols from
/lib/i686/libpthread.so.0…done.
Loaded symbols for
/lib/i686/libpthread.so.0
Reading symbols from
/lib/i686/libm.so.6…done.
Loaded symbols for /lib/i686/libm.so.6
Reading
symbols from /usr/lib/libz.so.1…done.
Loaded symbols for
/usr/lib/libz.so.1
Reading symbols from
/usr/lib/libstdc++.so.5…done.
Loaded symbols for
/usr/lib/libstdc++.so.5
Reading symbols from
/lib/i686/libc.so.6…done.
Loaded symbols for /lib/i686/libc.so.6
Reading
symbols from /lib/libgcc_s.so.1…done.
Loaded symbols for
/lib/libgcc_s.so.1
Reading symbols from /lib/ld-linux.so.2…done.
Loaded
symbols for /lib/ld-linux.so.2
Reading symbols from
/lib/libnss_files.so.2…done.
Loaded symbols for /lib/libnss_files.so.2
#0
0×4202cec1 in __strtoul_internal () from
/lib/i686/libc.so.6
(gdb)
进入gdb提示符,输入where,找到错误发生的位置和堆栈,如下:
(gdb) where
#0 0×4202cec1 in __strtoul_internal () from
/lib/i686/libc.so.6
#1 0×4202d4e7 in strtoul () from
/lib/i686/libc.s
core文件是由应用程序收到系统信号后崩溃产生的,该文件中记录了程序崩溃的原因(例如含亩收到闭枯那种信号),调用堆栈和崩溃时的内存及变量值等等的信息。 打开core文件与编译时使用的编译器有关,但绝大多数linux程序是使用gcc编译器编译的,因此可使用对应gdb调试器打开,命令格谈态森式如下: $ gdb 应用程序文件名 core文件名 举例: $ gdb /usr/bin/gedit ~/core------ 查看由gedit崩溃产生的core文件 (gdb) bt------ 或者backtrace, 查看程序运行到当前位置之前所有的堆栈帧情况) (gdb) quit ------ 退出 如果不知道core文件由哪个文件产生的,可使用file命令显示 $ file corlinux kernelAndroid系统coredump
奔跑的码仔
原创
关模孙注
1点赞·4007人阅读
1.打开内核coredump功能
Android系统的linux内核有可毕哗能没有打开coredump功能,可以通过查看android系统是否存在/proc/sys/kernel/core_patten配置项来确定,如果没有该配置项,那么需要重新配置内核,并且重新编译,并将其替换掉目标android系统内核(具体更新方试需要根据不同的硬件而定)。下面为coredump内核配置项的具体位置:
make menuconfig
Userspace binary formats-->
[*] Enable core dump support
开启该选项,系统就支持程序的coredump功能手码行,保存退出,重新编译内核,并下载到目标系统中就可了。重启后,在文件系统中应该就可看到/proc/sys/kernel/core_pattern配置项了。
2.配置coredump的存储位置
将core文件存储位置写入到/proc/sys/kernel/core_pattern即可,但/proc为内存文件系统,系统重启后,该配置会失效,所以对于android系统可以将配置该文件的命令写入到init.rc中,例如:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)