GDB是UNIX及UNIX-like下的调试工具。GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能。


一、功能

一般来说,GDB主要帮助你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。

二、使用语法
gdb  [ <programfile>  [ <corefile> | <pid> ] ]
<programfile>    可执行的二进制文件
<corefile>    核心转储程序(core  dump,  crash  records,  故障记录)
<pid>    运行程序的进程id

三、编译时要用上-g选项
gcc  -g  <programfile>  

四、基本命令
1.file  [<file>]    装入想要调试的可执行程序<file>
2.run  [<args>]    运行选择的程序并将参数<args>传给它
3.attach  <pid>    将gdb  attach到一个运行时的进程<pid>,并调试它
4.kill    终止正在调试的程序
5.quit    终止gdb
6.help  [<topic>]    帮助

五、单步跟踪和从断点开始继续执行
1.c[ontinue]    从断点开始继续执行
2.s[tep]    执行下一个源程序行,必要时进入下一个函数
3.n[ext]    在不单步执行进入其他函数的情况下,向前执行一行源代码
4.finish    运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参考值等信息。

六、使用断点
1.b[reak]  [<where>]    在代码里设置断点,这将使程序执行到这里时被挂起。<where>可以是16进制地址、函数名、行号、相对的行位移
2.[r]watch  <expr>    为表达式(变量)expr设置一个观察点,一旦表达式值被写或读时,马上停住程序
3.info  break[points]    列出当前所有的断点
4.clear  [<where>]    去除一个指定的断点

七、查看相关的命令
1.list  [<where>]    列出产生执行文件的源代码部分<where>
2.search  <regexp>    在源文件中搜索正规表达式<regexp>
3.backtrace  [<n>]    显示程序中当前位置和表达如何到达当前位置的栈跟踪<n>
4.info  [<what>]    显示与该程序有关的各种信息<what>(可以是局部变量和函数参数)
5.p[rint]  [<expr>]    打印变量或是表达式的值<expr>

八、修改数据和控制路径的命令
1.set  <name>  <expr>    给变量或参数赋值
2.jump  <where>    在源程序中的另一个<where>开始运行

GDB学习笔记的更多相关文章

  1. Gdb学习笔记1

    其实,从很早就开始接触gdb程序,gdb调试程序伴我成长,现在对其用法记录以下: 当程序的运行结果和预期结果不一致,或者程序出现运行错误时,gdb就可以派上大用处了.调试的基本过程是:  -> ...

  2. 《软件调试的艺术》学习笔记——GDB使用技巧摘要

    <软件调试的艺术>学习笔记——GDB使用技巧摘要 <软件调试的艺术>,因为名是The Art of Debugging with GDB, DDD, and Eclipse. ...

  3. MIT 6.828 JOS学习笔记2. Lab 1 Part 1.2: PC bootstrap

    Lab 1 Part 1: PC bootstrap 我们继续~ PC机的物理地址空间 这一节我们将深入的探究到底PC是如何启动的.首先我们看一下通常一个PC的物理地址空间是如何布局的:        ...

  4. GDB调试笔记

    参考资料:GDB调试精粹及使用实例 # 调试实例 #include <iostream> #include <cstring> using namespace std; ][] ...

  5. C语言学习笔记之成员数组和指针

    成员数组和指针是我们c语言中一个非常重要的知识点,记得以前在大学时老师一直要我们做这类的练习了,但是最的还是忘记了,今天来恶补一下.     单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个 ...

  6. 【原创】ZYNQ学习笔记(一) HelloWorld实现

    拿过ZYNQ开发板,里面给了很多部件,果断从网上下载了手册,N多手册和原理图. 要比Spartan-6复杂多了,耐心地看了看,知道ZYNQ系列分为PS(系统)以及PL(逻辑)部分. 之前,自己一直在做 ...

  7. CC/G++ 学习笔记

    CC/G++ 学习笔记 本文是<An introduction to GCC>的学习笔记,记录使用GCC/G++主要的实用技巧,本文讲述的知识基本上摘自本书,附带自己的一些体验.如果想详细 ...

  8. GCC/G++ 学习笔记

    本文是<An introduction to GCC>的学习笔记,记录使用GCC/G++主要的实用技巧,本文讲述的知识基本上摘自本书,附带自己的一些体验.如果想详细查看本书,请戳这里. 一 ...

  9. lfs(systemd版本)学习笔记-第3页

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs(systemd)学习笔记-第2页 的地址:https://www.cnblogs.com/renren-study-no ...

随机推荐

  1. [CSP-S模拟测试]:big(Trie树+贪心)

    题目描述 你需要在$[0,2^n)$中选一个整数$x$,接着把$x$依次异或$m$个整数$a_1~a_m$.在你选出$x$后,你的对手需要选择恰好一个时刻(刚选完数时.异或一些数后或是最后),将$x$ ...

  2. JavaScript 查看stack trace

    How can I get a JavaScript stack trace when I throw an exception? Edit 2 (2017): In all modern brows ...

  3. 图像bayer格式介绍【转】

    本文转载自:http://www.cnblogs.com/whw19818/p/6223143.html 1 图像bayer格式介绍 bayer格式图片是伊士曼·柯达公司科学家Bryce Bayer发 ...

  4. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_1_Map集合概述

    map集合是双列集合 map有两个泛型.左边K也叫作键 右边V是value

  5. GIt 工作区与暂存区

    转载:https://www.liaoxuefeng.com/wiki/896043488029600/897271968352576 工作区与暂存区 工作区(Working Directory) 就 ...

  6. EL表达式.jsp指令等

    1.JSP标准指令:<%@ 标准指令(属性 )%><%@ page %><%@ include %><%@ taglib %> 2.JSP程序代码元素: ...

  7. Krustal重构树

    zz:https://blog.csdn.net/ouqingliang/article/details/81206050 Kruskal重构树基于Kruskal算法.在执行算法过程中,Kruskal ...

  8. sqlMap.xml配置文件中迭代一个集合的方式

    比如:根据班级号查询学生的信息,参数是list 1.foreach的用法:[写法一] <select id="getStudentListByClassId" resultM ...

  9. mysql修改库、表、字段 字符集,中文排序

    查看字段编码: show full columns from t2;show variables like '%character%';show variables like 'collation_% ...

  10. <每日一题> Day8:CodeForces-996A.Hit the Lottery(贪心)

    原题链接 因为数据太水,我直接一发暴力过了...... #include <cstdio> using namespace std; ] = {, , , , }; int main() ...