各位看官们,大家好。我们在上一回中说简单地介绍了GDB。这一回中,我们介绍GDB的调试功能:单步

调试。

闲话休提,言归正转。

让我们一起talk GDB吧!

看官们,我们先说一下什么是单步调试。大家都知道。程序是依照指令。一步一步地执行,仅仅是程序执行

的非常快,所以你没有办法看到走过的每一步。

这个有点类似我们寻常走路,一步一步地向前走,在路上可

以看到很多风景,假设坐车,那么车速太快了,就会看不清楚路上的风景。单步调试就是不让程序非常快地

执行,通俗点说,说是不让程序“坐车”走,让程序一步一步地执行。

我们来看看怎样使用GDB让程序一步一步地执行。具体的过程例如以下:

  • 1.启动GDB:gdb file.o(表示使用GDB对file.o这个程序进行调试);
  • 2.開始调试:start.这个时候。GDB会从file.o程序中的main函数開始执行;
  • 3.单步调试:next(能够缩写为n)。

    程序执行到下一条语句;

  • 4.重复调试:继续输入n,程序就会跳到下一行。如此重复,程序就会一步步地执行。

这里有个技巧和大家共享一下:运行完第一个n命令后,假设想继续运行n命令,那么仅仅须要按下回车键就

能够继续运行n命令。而不须要继续输入n,由于在GDB中回车键表示反复运行它前面的命令,这个有点类似

Linux中的点命令。

在单步调试过程中遇到程序中的函数时。会把函数调用当做一个总体。大家可能不理解。没关系,咱们举个

样例:程序中有下面三条语句:

a =5;b = 3;

c =min(a,b); //min是求最小值的一个函数

printf("min is :%d",c);

当程序执行到“a =5;b = 3;”这行时。使用单步调试命令n,程序会执行到“c =min(a,b);”这一行,假设再执行

单步调试n。那么程序会执行到“printf("min is :%d",c);“这一行。大家都知道,函数是多个语句组成的,不

会一步就执行完,可是单步调试的时候把函数看成了一个总体,让它一步执行完。

假设我们想看函数中每

个语句的执行步骤,怎么办?看官莫急。强大的GDB不会让我们失望的。我们能够使用GDB的命令:step

(缩写为s),使用该命令能够进入函数中。

然后就能使用单步调试命令。一步一步地看清楚函数中每条语句

的执行步骤了。

假设想从函数中跳出来能够使用命令:finish.这时程序会调用函数的地方,也就是我们样例

中“printf("min is :%d",c);“这一行。

看官们,通过单步调试,我们能够看到程序执行的“脚印”。

在调试过程中,假设看到程序执行步骤与我们

事先给程序设计好的步骤不一样,那么说明程序没有依照我们设计的步骤走。这肯定是有地方出问题了。

我们须要把出问题的地方找出来。由于程序是一步一步地执行,所以我们非常easy找到哪一步出了问题,进

而找出问题的解决办法。这便是单步调试的作用。当然了。单步调试还有其他的作用。它能够和其他调试方法

一起配合使用,至于是什么调试方法。我们以后在的章回中会介绍。

我们平时还认为电脑上的程序不够快呢,你还不让它“坐车”,让它步行。这不让电脑更加慢了吗?看官说的

有道理。只是,我们通过单步调试让程序运行慢下来,目的是为了看清楚程序每一步运行时的样子,这样

有助于我们发现程序中错误。进而方便我们改动程序中错误。试想一下。程序“坐着车”跑的那么快,你还没

有看清楚它的样子。它已经跑的无影无踪,更不要说找它的运行时的错误了。

看官们,关于GDB的内容。今天咱们就讲到这里。

欲知后事怎样,且听下回分解!

一起talk GDB吧(第二回:GDB单步调试)的更多相关文章

  1. GDB:从单线程调试到多线程调试(MFiX单步调试)

    GDB:从单线程调试到多线程调试 1. 裸跑GDB 1.1 安装GDB sudo apt-get install gdb 1.2 编译程序 由于需要调试,因此编译的时候需要添加-g编译参数: 1.3 ...

  2. GDB 单步调试汇编

    本文同时发表在 https://github.com/zhangyachen/zhangyachen.github.io/issues/134 之前在看汇编的时候一直是肉眼看GCC -S的结果,缺点是 ...

  3. 手把手教你使用eclipse+qemu+gdb来单步调试ARM内核【学习笔记】

    平台信息:linux4.0 平台:qemu 作者:庄泽彬 说明:笨叔叔的Linux视频的笔记 一.编译linux源码 export CROSS_COMPILE=arm-linux-gnueabi- e ...

  4. LINUX上使用GDB单步调试Chromium Android C++代码。

    ###动机###在LINUX使用GDB单步调试Chromium Android C++代码. [1]编译android平台Chromium, 修改GN文件中编译选项:-g -O0 使得编译优化更少,便 ...

  5. GDB调试指南-单步调试

    前言 前面通过<启动调试>,<断点设置>,<变量查看>,我们已经了解了GDB基本的启动,设置断点,查看变量等,如果这些内容你还不知道,建议先回顾一下前面的内容.在启 ...

  6. gdb常用命令及gdb调试多进程/线程程序&coredump

    一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 ...

  7. [转]Building a Basic Fuzzer with GDB: The Five Minute GDB Scripting Tutorial

    link:http://www.praetorian.com/blog/building-a-basic-fuzzer-with-gdb-the-five-minute-gdb-scripting-t ...

  8. [gdb][python][libpython] 使用gdb调试python脚本

    https://devguide.python.org/gdb/ https://sourceware.org/gdb/current/onlinedocs/gdb/Python.html#Pytho ...

  9. GDB(十)--调试正在运行的进程

    我编写了一个循环: long i;    for (i = 0; i < 999999; i++) {        mt.a += 1;        sleep(1);    }把它编译成a ...

随机推荐

  1. iOS学习笔记35-社交分享

    一.社交分享 现在很多应用都内置“社交分享”功能,可以将看到的新闻.博客.广告等内容分享到微博.微信.QQ.人人网等,其实从iOS6.0开始苹果官方就内置了Social.framework专门来实现社 ...

  2. 【bzoj2698】染色 期望

    题目描述 输入 输入一行四个整数,分别为N.M.S和T. 输出 输出一行为期望值,保留3位小数. 样例输入 5 1 2 3 样例输出 2.429 题解 期望 由于期望在任何时候都是可加的,因此只要算出 ...

  3. 【Luogu】P3343地震后的幻想乡(对积分概率进行DP)

    题目链接 神难qwq.配合rqy的博客食用. 首先我们学到有一个概率函数$p(x)$表示某事件发生概率取值小于x的函数.这个函数有什么特点呢? 那就是$\int_{-∞}^{∞}p(x)dx=1$ 这 ...

  4. 二进制<3>

    Matrix67:位运算简介及实用技巧(三) 进阶篇(2) (2010-07-27 11:10:44) 转载▼ 标签: it 分类: 老贾·OI相关 n皇后问题位运算版    n皇后问题是啥我就不说了 ...

  5. [LOJ#515]「LibreOJ β Round #2」贪心只能过样例

    [LOJ#515]「LibreOJ β Round #2」贪心只能过样例 试题描述 一共有 \(n\) 个数,第 \(i\) 个数 \(x_i\) 可以取 \([a_i , b_i]\) 中任意值. ...

  6. bzoj 4311 向量 时间线建线段树+凸包+三分

    题目大意 你要维护一个向量集合,支持以下操作: 1.插入一个向量(x,y) 2.删除插入的第i个向量 3.查询当前集合与(x,y)点积的最大值是多少.如果当前是空集输出0 分析 按时间线建线段树 大致 ...

  7. poj 1637 混合图欧拉回路 学习笔记

    题目大意 求混合图是否存在欧拉回路 做法 有向边我们只有增加入度出度 对于无向边,我们给它设定一个初始方向 如果不能满足|入度-出度|为偶数,无解 然后在网络流图中, 设设定方向的反向连一条边,表示反 ...

  8. bzoj 2799 [Poi2012]Salaries 性质+二分

    题目大意 给出一棵n个结点的有根树,结点用正整数1~n编号. 每个结点有一个1~n的正整数权值,不同结点的权值不相同, 并且一个结点的权值一定比它父结点的权值小(根结点的权值最大,一定是n). 现在有 ...

  9. 【CF1017C】The Phone Number(构造)

    题意:要求构造一个1-n的排列,使得它的LIS+LDS最小 n<=1e5 思路:一个百度之星时候从LYY处听来的结论:1-n随机排列的LIS期望是根号级别的 考虑将LIS与LDS都构造成根号级别 ...

  10. Using a USB host controller security extension for controlling changes in and auditing USB topology

    Protecting computer systems from attacks that attempt to change USB topology and for ensuring that t ...