第六课 GDB调试 (上)
1序言:
1.初学者经过学习前面的Makefile知识,信心满满,内心觉得应该要好好学习不单掌握语言的编写,也要学会相对应的工具调高开发效率。有时我们写出来的代码经过执行结果却跟我们预期不一样那怎么办呢,这个时候就要调试了。说到调试有经验的开发童鞋知道在windows下游大名鼎鼎的VS集成平台,那么在linux下呢,特别是编写C、C++有什么工具可以方便我们调试呢,这里我给大家推荐的就是GDB,它也是GNU的debugger,专门为调试而生的。
2知识点:
2.1gdb的大致分为以下功能:
2.1.1.启动程序;
2.1.2.可以在通过断点进行调试;
2.1.3.在断点住停止可以查看运行的状况;
2.1.4.可以动态的改变执行的环境,包括系统环境,系统变量,局部变量等等;
2.2gdb相关命令说明
2.2.1 file <filename>:加载可执行文件;;
2.2.2 r:run的简写,表示运行程序,如果有断点,会在第一个断点出暂停;
2.2.3 l:list的简写,列出相关的函数代码或者是行代码(包括其他文件),好像最多10行吧,也可以使用l 1,10:指定显示1到10行;
2.2.4 b function或b num:b就是breakpoint的简写,表示在function函数是打断点,或者是在num行号处打断点,也可以在循坏中使用:b if i=10表示在循环中i=10的时候暂停;
2.2.5 d num:删除编号从1开始的断点,不指定则全部删除;
2.2.6 s:执行下一句语句,Step Into (单步跟踪进入),如果有函数则进入函数内部;
2.2.7 n:执行下一句语句,Step Over (单步跟踪),如果有函数也不会进入函数内部;
2.2.8 p:print的简写,打印某个变量的值,也可以打印变量、数组地址,注意查看动态分配的数组使用:p arry@10,其中10为arry变量内存的长度,改变运行时的数据:p x=100;
2.2.9 ptype:查看变量的类型;
2.2.10 i:info的简写,可以显示出好多信息;
2.2.11 q:quit的简写,表示退出当前命令;
2.2.12 help <name>:表示查看相关gdb命令的手册说明;
2.2.13 until:退出当前函数;
2.2.14 finish:运行到当前函数结束前,如果偶返回值则提示返回值;
3原理:
3.1在编译的时候附加上调试信息(比如断点,输出调试信息等等),执行gdb调试,程序会按照调试信息顺序执行有断点的地方暂停,有调试信息输出就输出等等方便程序员调试程序,一遍观察程序在运行的一切。下面通过创建一个简单的例子来说明gcc编译,gdb的启动以及调试步骤。
4实践:
4.1.先创建一个简单的gdbtest.c文件,内容如下:
#include <stdio.h> int main(void)
{
int a = 1;
int b = 2;
int c = a + b;
printf("result :%d",c);
return 0;
}
4.2.编译如下:
gcc -Wall -g gdbtest.c -o gdbtest #-g参数
4.3.启动gdb,并加载gdbtest可执行文件:
gdb #直接在当前gdbtest.c目录中键入gdb命令就会进入调试器
file gdbtest #在gdb命令下输入此命令加载文件,输出Reading symbols from gdbtest ... done表示加载完成
4.4.使用命令l查看文件此时会列出代码以及标记行好,记住行号或者函数名称以便打断点;

4.5.使用格式:b 函数(行号)打断点,输入命令:b main或者:b 3效果都是一样!

4.6.使用r命令运行程序会在断点处暂停,此时可以使用s命令执行下一步(n命令是函数也一并执行,s命令会进入函数内部),断点出暂停后也可以使用c命令继续执行,可以使用p打印变量信息查看相关变量:

4.7.也可以使用命令:disassemble main查看main函数的汇编代码,这应用是更高级的技巧了!,当不需要调试要退出的时候使用q命令即可。

这节课就先讲到这里,先了解下gdb以及简单运动gdb做简单的调试。明天继续!!1
第六课 GDB调试 (上)的更多相关文章
- 第七课 GDB调试 (下)
1序言: 通过前面一节第六课 GDB调试 (下)文章,可以掌握理解了gdb调试:怎么启动.运行,打断点.查看变量.甚至改变变量等的知识,今天来大概讲解下调试bug的类型. 2知识点: 2.1 就像之前 ...
- Linux开发工具之gdb(上)
三.gdb调试(上) 01.gdb:gdb是GNU debugger的缩写,是编程调试工作. 功能: 启动程序,可以按照用户自定义的要求随心所欲的运行程序: 可让被调试的程序在用户所指定的调试 ...
- 第02课:启动GDB调试
使用GDB调试程序一般有三种方式: gdb filename gdb attach pid dgb filename corename 也对应这本节课的核心内容: 直接调试目标程序 附加进程 调试co ...
- 第二课:启动 GDB 调试
使用 GDB 调试程序一般有三种方式: gdb filename gdb attach pid gdb filename corename 这也对应着本节课的核心内容: 直接调试目标程序 附加进程 调 ...
- mac上eclipse用gdb调试(转)
mac上eclipse用gdb调试 With its new OS release, Apple has discontinued the use of GDB in OS X. Since 2005 ...
- 调试利器GDB(上)
什么是GDB: GDB应用: 静态分析工具与动态分析工具: GDB启动方式: GDB启动之后会有一个交互式的命令行,可以输入GDB特定的命令让GDB去工作. gdb test.out意思是这一次gdb ...
- gdb 调试(设置变量)(六)
一旦使用GDB挂上被调试程序,当程序运行起来后,你可以根据自己的调试思路来动态地在GDB中更改当前被调试程序的运行线路或是其变量的值,这个强大的功能能够让你更好的调试你的程序,比如,你可以在程序的一次 ...
- 硬盘上的一些算法小题目||and今天看了下林锐的书以及gdb调试 及一些变成算法小题目
gdb调试:观察点,断点,事件捕捉点.step 进入函数,next 跳过函数,until 跳出循环,finish 结束函数 林锐:书后试题 & c++的对象模型图 看了二叉树的非递归遍历, 链 ...
- CentOS 6.5上使用gdb调试时出现Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.i686 .
在CentOS6.5上用gdb调试时提示Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.i686先修改 ...
随机推荐
- poj3565 Ants km算法求最小权完美匹配,浮点权值
/** 题目:poj3565 Ants km算法求最小权完美匹配,浮点权值. 链接:http://poj.org/problem?id=3565 题意:给定n个白点的二维坐标,n个黑点的二维坐标. 求 ...
- <!--#include file= menu.shtml --> 引用出现空白
打开footer 然后 在DW里 点--->修改--->页面属性---->标题/编码----->把包括unicode签名(bom)的勾取消 就OK了 作用:可使用 .shtml ...
- poj 1129(dfs+图的四色定理)
题目链接:http://poj.org/problem?id=1129 思路:根据图的四色定理,最多四种颜色就能满足题意,使得相邻的两部分颜色不同.而最多又只有26个点,因此直接dfs即可. #inc ...
- 总结 一下UML 类图的关系
1,实线三角 表示 泛化 是一种继承关系,它指定了子类如何特化父类的所有特征和行为 2,虚线三角 表示 实现 是一种类与接口的关系,表示类是接口所有特征和行为的实现 3,空心菱形 表示 聚合 是整 ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.1——单元测试
问题: 你想要测试app中的非android部分. 解决方案: 可以使用Android Studio1.1里面增加的单元测支持和Android的Gradle插件. 讨论: ADT插件只支持集成测试,并 ...
- 62、常规控件(5)Navigation View –美观的侧滑视图
1.main_layout.xml <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.andr ...
- SSH原理记录
一.什么是SSH? 简单说,SSH是一种网络协议,用于计算机之间的加密登录. 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会 ...
- 项目分析(GS,NET,NGP关系)
看了两天,这三者之间的关系好像是这样的,因为GS和net在同一台机器上,所以用共享内存通信,毕竟共享内存通信是最快的进程间通信的方式,而NGP是属于客户端的,Net是属于服务器的,他与Net进程是基于 ...
- Android 触摸及手势操作GestureDetector
现在的智能手机不敢说百分百的都是触摸屏,也应该是百分之九九以上为触摸屏了,触摸屏为我们操作无键盘.无鼠标的手机系统带来了很多的便利.当用户触摸屏幕时会产生很多的触摸事件,down.up.move等等. ...
- 【BZOJ3439】Kpm的MC密码 Trie树+可持久化线段树
[BZOJ3439]Kpm的MC密码 Description 背景 想Kpm当年为了防止别人随便进入他的MC,给他的PC设了各种奇怪的密码和验证问题(不要问我他是怎么设的...),于是乎,他现在理所当 ...