第六课 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先修改 ...
随机推荐
- Xcode 调试方法总结
前言:编写代码过程中出现错误.异常是不可避免的.通常我们都需要进行大量的调试去寻找.解决问题.这时,熟练掌握调试技巧将很大程度上的提高工作效率.接下来就说说开发过程中Xcode的调试方法. 1. En ...
- 使用JSP实现用户登录
本文讲述使用JSP实现用户登录,包括用户登录.注册和退出功能等. 1.系统用例图 2.页面流程图 3.数据库设计 本例使用oracle数据库 创建用户表 包括id,username,password和 ...
- 由「Metaspace容量不足触发CMS GC」从而引发的思考
https://mp.weixin.qq.com/s/1VP7l9iuId_ViP1Z_vCA-w 某天早上,毛老师在群里问「cat 上怎么看 gc」. 好好的一个群 看到有 GC 的问题,立马做出小 ...
- 常见tcp端口说明
TCP端口(静态端口)TCP 0= ReservedTCP 1=TCP Port Service MultiplexerTCP 2=DeathTCP 5=Remote Job Entry,yoyoTC ...
- 第一百五十二节,封装库--JavaScript,表单验证--年月日注入
封装库--JavaScript,表单验证--年月日注入 效果图 html <div id="reg"> <h2 class="tuo"> ...
- Apollo 刨析:简介
Apollo是配置在IIS服务器上的一个Web站点,它使用了.NET4.0和ASP.Net的技术. 代码是C#编写的.是基于ASP.NET MVC3的Web开发框架上编写的一个应用. 它使用到了N ...
- java小数位-DecimalFormat(转)
转载:http://blog.sina.com.cn/s/blog_93daad410101159s.html java格式化数字DecimalFormat 在输出数字时,有时需要给数字配上单位,有时 ...
- java获取系统时区
//Calendar cal = Calendar.getInstance(); //TimeZone timeZone = cal.getTimeZone(); TimeZone timeZone ...
- Jmeter JDBC执行多条SQL
今天在编写自动化回归脚本的时候,需要在jmeter的jdbc请求中执行多条sql,在百度里搜索了一些文章,按照网上提供的步骤,发现不起作用,后来发现是作者的截图误导了,为了让后面的同学少走弯路,这里我 ...
- 修改MyEclipse内存
Window ---> preferrences-->installed JREs :点击JDK修改argument为:-Xms512m -Xmx1024m -XX:PermSize= ...