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是切换线程
测试结果例如
页:
[1]