gdb coredump
进程崩溃的时候,coredump文件会将进程的内存映像以及寄存器、堆栈指针等信息保存下来以便使用gdb 调试分析。
1. coredump文件生成开关
ulimit -c
0 代表 关闭coredump文件生成开关。可通过ulimit -c filesize/unlimited
进行设置,其中filesize设置过小,使用gdb调试相应的coredump文件时会出错;
2. coredump文件生成路径
/proc/sys/kernel/下三个core_开头的文件
(1) /proc/sys/kernel/core_uses_pid
可以控制core文件的文件名中是否添加pid作为扩展 文件内容为1,表示添加pid作为扩展名,生成的core文件格式为core.xxxx;为0则表示生成的core文件同一命名为core。
(2) /proc/sys/kernel/core_pattern
可以控制core文件保存位置和文件名格式,可通过以下命令修改此文件:
echo "/corefile/core-%e-%p-%t" > core_pattern
可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳
以下是参数列表:
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名
3. objcopy
程序一般编译好,发布的时候使用去掉符号的程序. strip –strip-unneeded app_all app_name 我们发布使用app_name无符号的版本 调试的时候我们需要把符号保存一下.供gdb加载 objcopy –only-keep-debug app_name app.symbol 把程序app_name 的符号copy到app.symbol文件中
4. gdb
调试无符号版本
gdb -c core.xxxx app_name 然后加载符号
(1) gdb使用dump文件运行程序,获取崩溃堆栈信息
gdb -c core.xxxx app_name
(2) 加载符号
symbol-file app.symbol
Reading symbols from app.symbol…done.
(3) 查看堆栈信息
bt 现在就可以定位到程序崩溃到代码的哪一行了
或者直接调试带符号版本
gdb -c core.xxxx app_all 调试带符号版本
注:
NeoKylin Linux Server 7.0 /ubuntu
会在Kill时产生dump文件.或者在throw时产生dump文件