小樱 发表于 2018/6/26 18:17

Linux使用gdb设置core_pattern输出文件路径,调试进程死锁bug 异常退出dump文件快照,例如生成kangle进程ulimit 无限大小

Linux使用gdb设置core_pattern输出文件路径,调试进程死锁bug 异常退出dump文件快照,例如生成kangle进程ulimit 无限大小

使用ulimit -c unlimited,代表无限core文件大小限制(注意这个是c,用途不一样),单位KB,默认为0代表不生成core文件在程序根目录
ulimit -c unlimited
echo "* soft core unlimited" >> /etc/security/limits.conf
echo "* hard core unlimited" >> /etc/security/limits.conf

查看当前文件路径,默认为root目录下core文件
cat /proc/sys/kernel/core_pattern
改成如下并且保存可以设置生成文件不在根目录下
/home/core-%e-%s-%t.%p

参考
%%:相当于%
%p:相当于<pid>
%u:相当于<uid>
%g:相当于<gid>
%s:相当于导致dump的信号的数字
%t:相当于dump的时间
%e:相当于执行文件的名称
%h:相当于hostname


另一种方式也可以这样用命令临时生效
sysctl -w kernel.core_pattern=/home/core-%e-%s-%t.%p

查看是否生效
sysctl -a | grep kernel.core

永久生效可以在 /etc/sysctl.conf 文件中增加:
kernel.core_pattern=/home/core-%e-%s-%t.%p

加好后,如果你想不重启看看效果的话,则用下面的命令:
sysctl -p /etc/sysctl.conf


测试文件生成,会杀死当前登录窗口
kill -s SIGSEGV $


有了core文件后如何打开呢
yum -y install gdb

执行info t和bt可以直接打印结果

gdb 程序二进制文件绝对路径 core文件
也是可以执行那两个命令

然后t 0
bt
t 1
bt
t 2
bt
t 3
bt
切换线程
一直到t 7

查看每个线程的bt,t n是切换线程

小樱 发表于 2018/6/28 01:55


测试结果例如
页: [1]
查看完整版本: Linux使用gdb设置core_pattern输出文件路径,调试进程死锁bug 异常退出dump文件快照,例如生成kangle进程ulimit 无限大小