先内核转储文件再gdb调试

转载 2015年07月09日 23:38:11

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 
添加命令名

信号 核心转储 gdb调试

信号:          使用kill -l  查看linux中的信号。         可以从上图看出linux中一共有62个信号(没有32,33)。1-31为普通信号,34-64为实时信号。我...
  • zhang1308299607
  • zhang1308299607
  • 2017年06月24日 00:05
  • 148

GDB调试内核总结

这里记录平时使用gdb调试内核KE的步骤和方法. 有不足的地方也请大家指出和完善. 1 必备工具和文件  Gdb,addr2line,vmlinux以及内核coredump文件 在64位平台,gdb和...
  • bin_linux96
  • bin_linux96
  • 2015年11月09日 11:20
  • 1698

Linux内核之GDB基本调试方法

一般单板软件Linux内核出现crash如何采用GDB工具进行调试? 基本方法过程如下: 1. 为了测试GDB操作,故意在kernel/linux/fs/ioctl.c文件的do_vfs_ioct...
  • wuruixn
  • wuruixn
  • 2014年07月31日 17:23
  • 7799

Vmware+gdb调试Linux内核——工欲善其事,必先利其器

今天我终于
  • GrubLinux
  • GrubLinux
  • 2014年06月01日 02:04
  • 6914

利用gdb远程调试驱动模块

在前面的文章中我总结了gdb远程调试内核的大致过程,由于一开始利用kgdb就是想调试自己的驱动模块,所以,这里我对怎么利用gdb远程调试驱动模块做一个总结。     其实调试驱动模块和调试内核的过程是...
  • Buyi_Shizi
  • Buyi_Shizi
  • 2016年07月28日 17:15
  • 1128

使用gdb跟踪Linux内核启动过程

start_kernel()是内核的汇编与C语言的交接点,在该函数以前,内核的代码都是用汇编写的,完成一些最基本的初始化与环境设置工作。start_kernel就像是c代码中的main函数。不管你关注...
  • sunyeyi
  • sunyeyi
  • 2015年03月21日 18:17
  • 2674

GDB简单调试linux内核与模块的方法

gdb 对于看系统内部是非常有用. 在这个级别精通调试器的使用要求对 gdb 命令有信心, 需要理解目标平台的汇编代码,  以及对应源码和优化的汇编码的能力.      调试器必须把内核作为一...
  • wh8_2011
  • wh8_2011
  • 2016年07月28日 07:16
  • 1619

信号 核心转储 gdb调试

信号:          使用kill -l  查看linux中的信号。         可以从上图看出linux中一共有62个信号(没有32,33)。1-31为普通信号,34-64为实时信号。我...
  • zhang1308299607
  • zhang1308299607
  • 2017年06月24日 00:05
  • 148

使用bochs和gdb联合调试Linux内核

bochs这个软件准确来说应该叫做“模拟器”,而不是虚拟机,因为VMware等虚拟机是将Guest系统所有的指令都放到真实硬件上执行,而bochs模拟器则是直接用软件模拟硬件的执行,举个例子,在boc...
  • u010035971
  • u010035971
  • 2016年03月15日 17:37
  • 913

gdb调试命令的使用及总结

gdb是一个在UNIX环境下的命令行调试工具。如果需要使用gdb调试程序,请在gcc时加上-g选项。下面的命令部分是简化版,比如使用l代替list等等。 1.基本命令 1)进入GDB  #gdb t...
  • finish_dream
  • finish_dream
  • 2016年07月01日 23:31
  • 3480
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:先内核转储文件再gdb调试
举报原因:
原因补充:

(最多只允许输入30个字)