先内核转储文件再gdb调试

来源:互联网 发布:ds数据精灵 编辑:程序博客网 时间:2024/05/16 06:41

gdb跟踪调试是linux环境下调试常用的方法,但在解决一些问题,如频繁创建线程,打印信息很多时,gdb调试会显得效率很低。这个时候,可以先生成内核转储文件,再针对生成的转储文件进行调试,从而大幅度提高调试效率。

1、生成内核转储文件


  1. # ulimit –a //查看默认的配置信息,第一项为内核转储文件大小,默认值为0  
  2. # ulimit –c unlimited // ulimit –c 可指定内核转储文件大小,unlimited表示是最大值  
  3. # ./filename //运行测试代码,直到出现段错误


2、用gdb对内核转储文件调试

运行完后,如果有段错误,就会在当前目录下生成core.pid(pid为进程号)文件

# gdb –c core.pid ./filename 或输入命令#gdb –core=core.pid./filename

//从生成的转储文件中读取断点处信息,然后自己调试,方法与gdb的相同

3、在特定目录下生成转储文件

1/proc/sys/kernel/core_uses_pid可以控制core文件的文件名中是否添加pid作为扩展。文件内容为1,表示添加pid作为扩展名,生成的core文件格式为core.xxxx;为0则表示生成的core文件同一命名为core。可通过以下命令修改此文件:

echo"1" > /proc/sys/kernel/core_uses_pid

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 thefilename 
添加导致产生core的信号
    %t - insert UNIX time that the coredump occurred intofilename 
添加core文件生成时的unix时间
    %h - insert hostname where the coredump happened intofilename 
添加主机名
    %e - insert coredumping executable name into filename 
添加命令名
0 0
原创粉丝点击