码迷,mamicode.com
首页 > 数据库 > 详细

GDB Core,gdb 调试大全,core文件调试

时间:2015-11-24 12:38:47      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

编译: 

gcc -g -o hello hello.c   



gdb 调试:
基本 gdb 命令.
命 令 描 述
小结:常用的gdb命令     
  backtrace   显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where)     
  breakpoint   在程序中设置一个断点     
  cd   改变当前工作目录     
  clear   删除刚才停止处的断点     
  commands   命中断点时,列出将要执行的命令     
  continue   从断点开始继续执行     
  delete   删除一个断点或监测点;也可与其他命令一起使用     
  display   程序停止时显示变量和表达时     
  down   下移栈帧,使得另一个函数成为当前函数     
  frame   选择下一条continue命令的帧     
  info   显示与该程序有关的各种信息     
  jump   在源程序中的另一点开始运行     
  kill   异常终止在gdb   控制下运行的程序     
  list   列出相应于正在执行的程序的原文件内容     
  next   执行下一个源程序行,从而执行其整体中的一个函数     
  print   显示变量或表达式的值     
  pwd   显示当前工作目录     
  pype   显示一个数据结构(如一个结构或C++类)的内容     
  quit   退出gdb     
  reverse-search   在源文件中反向搜索正规表达式     
  run   执行该程序     
  search   在源文件中搜索正规表达式     
  set   variable   给变量赋值     
  signal   将一个信号发送到正在运行的进程     
  step   执行下一个源程序行,必要时进入下一个函数     
  undisplay   display命令的反命令,不要显示表达式     
  until   结束当前循环     
  up   上移栈帧,使另一函数成为当前函数     
  watch   在程序中设置一个监测点(即数据断点)     
  whatis   显示变量或函数类型    
  gdb ./hello        #载入程序
  set args 1 2 3      #设置参数
  run
  基本gdb命令:







Core文件: 

 1. 查看系统是否允许生成core文件   

#ulimit -a   
  2. 使用如下命令取消限制,使系统能生成core文件 




ulimit -c unlimited   
或者指定core文件大小,如1K





ulimit -c 1024   
gdb调试core文件

. 用gdb查看core文件:
下面我们可以在发生运行时信号引起的错误时发生core dump了.
发生core dump之后, 用gdb进行查看core文件的内容, 以定位文件中引发core dump的行.
gdb [exec file] [core file]
如:
gdb ./test test.core
在进入gdb后, 用bt命令查看backtrace以检查发生程序运行到哪里, 来定位core dump的文件->行.

5. 用gdb实时观察某进程crash信息
启动进程
gdb -p PID
c
运行进程至crash
gdb会显示crash信息
bt

简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 
一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它 指向的 gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表, 在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界 访问,cpu就会产生相应的异常保护,于是segmentation fault就出现了. 
在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的 
1)访问系统数据区,尤其是往 系统保护的内存地址写数据 
最常见就是给一个指针以0地址 
2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域 

 

GDB Core,gdb 调试大全,core文件调试

标签:

原文地址:http://www.cnblogs.com/zendu/p/4991071.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!