应用程序调试工具gdb,王明学learn
应用程序调试工具gdb学习使用
一、GDB简介
GDB 是 GNU 发布的一款功能强大的程序调试工具。GDB 主要完成下面三个方面的功能:
1、启动被调试程序。
2、让被调试的程序在指定的位置停住。
3、当程序被停住时,可以检查程序状态(如变量值)。
1.1gdb使用流程
1.编译生成可执行文件:
gcc –g tst.c -o tst
2.启动 GDB
gdb tst(文件名)
3. 在 main 函数处设置断点
break main
4. 运行程序
run
5. 利用更加丰富的 gdb 命令对程序进行调试。
1.2gdb命令
1.list(l) 查看程序
2.break(b) 函数名 在某函数入口处添加断点
3.break(b) 行号 在指定行添加断点
4.break(b) 文件名:行号 在指定文件的指定行添加断点
5. info break 查看所有设置的断点
6. delete 断点编号删除断点
7.next(n) 单步运行程序(不进入子函数)
8.step(s) 单步运行程序(进入子函数)
9.continue(c) 继续运行程序知道下一个断电
10.print(p) 变量名 查看指定变量值
11. set var=value 设置变量的值
12.quit(q) 退出 gdb
二、使用Coredump解决Segment fault(段错误)
有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的.但这不像编译错误一样会提示到文件->行,而是没有任何信息, 使得我们的调试变得困难起来.
有一种办法是, 我们用gdb的step, 一步一步寻找.这放在短小的代码中是可行的。但如果程序代码数量比较庞大,我们就得使用另一种办法了。这时Linux系统可以把程序出错时的内存内容存储在一个core文件中, 这种过程叫Core Dump。
2.1 Core Dump要解决的问题---->段错误 Segment fault
Linux应用程序在运行过程中,经常会遇到Segment fault(段错误) 这样的错误。产生这样错误的原因通常有:
1. 数组访问越界
2. 访问空指针
3. 栈溢出
4. 修改只读内存
2.2 Core Dump-使能
在Linux系统中,默认是关闭core dump功能的,但是可以通过来ulimit命令打开/关闭core dump功能。
打开:ulimit -c unlimited
关闭:ulimit -c 0
2.3 core文件分析
发生core dump之后, 可以使用gdb进行查看core文件的内容, 以定位程序出错的位置.
用法:gdb 程序名 core文件名
例: gdb ./test core.12551
在进入gdb后, 用bt命令查看backtrace以检查发生程序运行到哪里, 来定位core dump的文件->行.
2.4使用GDB+Core+file找出程序中的错误

应用程序调试工具gdb,王明学learn的更多相关文章
- linux应用程序地址布局,王明学learn
linux应用程序地址布局 在学习Linux应用程序开发时,经常会遇到如下概念:代码段.数据段.BSS段(Block Started by Symbol,又名:未初始化数据段).堆(heap)和栈(s ...
- C实战:强大的程序调试工具GDB
C实战:强大的程序调试工具GDB 1.基本调试 这里只列举最最常用的GDB命令. 1.1 启动GDB gdb program:准备调试程序.也可以直接进入gdb,再通过file命令加载. 1.2 添加 ...
- 管道通信,王明学learn
管道通信 一.通讯目的 1.数据传输 一个进程需要将数据发送给另一个进程. 2.资源共享 多个进程之间共享同样的资源. 3.通知事件 一个进程需要向另一个/组进程发送消息,通知它们发生了某事件. 4. ...
- 进程控制理论,王明学learn
进程控制理论 一.进程 进程是一个具有一定独立功能程序的一次运行活动. 1.1进程特点 1.动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的 2.并发性:任何进程都可以同其他进程一起 ...
- 库函数系统调用文件方式,王明学learn
库函数系统调用文件方式 基于C函数库的文件编程是独立于具体的操作系统平台的,不管是在Windows.Linux还是其他的操作系统中,都是使用这些函数.使用库函数进行程序设计可提高程序的可移植性. 对于 ...
- 静态/动态函数库设计,王明学learn
静态/动态函数库设计 Linux应用程序设计中需要的外部函数主要由函数库和系统调用来提供. 两者区别: 一.函数库分类 函数库按照链接方式可分为: 1.静态链接库 对函数库的链接是放在编译时期(com ...
- 协处理器,王明学learn
协处理器 协处理器用于执行特定的处理任务,如:数学协处理器可以控制数字处理,以减轻处理器的负担.ARM可支持多达16个协处理器,其中CP15是最重要的一个. CP15提供16组寄存器 通过提供的16组 ...
- ARM伪指令,王明学learn
ARM伪指令 在ARM汇编语言程序中里,有一些特殊指令助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作.伪指令在元程序中的作用是为完成汇编 ...
- ARM指令学习,王明学learn
ARM指令学习 一.算数和逻辑指令 1— MOV 数据传送指令 2.— MVN 数据取反传送指令 3.— CMP 比较指令 4.— CMN 反值比较指令 5.— TST 位测试 ...
随机推荐
- Metronic 与 VS2013/2015 合作开发
Metronic 与 VS2013/2015 合作开发 去年购买了一个:METRONIC (http://www.keenthemes.com/) ,最近下了最新的版本:V3.7 ,解压缩后,目录 ...
- linux skill
linux console终端乱码解决 1.console终端乱码 在/etc/profile文件的最后一行添加如下内容: export LC_ALL="zh_CN.GB18030" ...
- uml 推荐文章
http://blog.csdn.net/zfrong/article/details/4086424 http://www.cnblogs.com/ywqu/archive/2009/12/14/1 ...
- 压测 apache ab 初探
2015年10月30日 14:58:34 ab是apache自带的压测命令, 在其bin目录下边, 不仅可以压测Apache, 也可以测nginx或其他服务器 可以模拟上传post值 (-p, 与下边 ...
- tortoiseSVN svn+ssh
2015年6月28日 11:45:10 星期日 今天实验用小海龟svn客户端的svn+ssh协议去链接版本库, 期望会快一点儿 首先在设置里 记着将连接ssh用的用户名和密码一块儿写到输入框中: -l ...
- Delphi XE5 android 获取网络状态
unit Androidapi.JNI.Network; interface function IsConnected: Boolean; function IsWiFiConnected: Bool ...
- h5页面的公共css
/*reset*/body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,tex ...
- 4.kvm克隆虚拟机
virt-clone 作用简介 virt-clone 主要是用来克隆kvm虚拟机,并且通过 Options.General Option.Storage Configuration.Networkin ...
- sprinvMVC路径拦截
关于这种路径的拦截: http://localhost:8080/moodleCourse-tool/scorm/23681/mod_scorm/content/1/index_SCORM.html ...
- Android Volley入门到精通:初识Volley的基本用法
1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...