各位看官们,大家好,上一回中我们说的是GDB查看信息的功能,而且说了怎样使用GDB查看程序执行时的

信息。这一回中,我们继续介绍GDB的调试功能:改动程序执行环境。当然了,我们也会介绍怎样使用GDB

改动程序执行环境。

闲话休提。言归正转。

让我们一起talk GDB吧!

大家都知道程序执行时须要一个执行的环境。比方从系统中分配内存,让程序读取一些数据等等。我们接

下来说一说,怎样改动程序的执行环境。这样能够让程序依照我们我要求来执行。在改动程序执行环境中

最经常使用的是改动变量的值。

作为一款优秀的调试器,GBD提供了改动变量的功能。该功能通过专门的命令实现:set variable iVal=0.

样例中表示把变量iVal的值改动成0。以下我们通过样例来说明。

#include<stdio.h>

int main()
{
int a,b;
a = 3;
b = 5; if(a < b)
printf("a is less then b \n");
else
printf("a is larger then b \n"); return 0;
}

1.编敲代码。打开VIM。输入上面的程序,而且保存到m.c文件里

2.编译程序。在终端中输入:gcc -g m.c -o s

3.执行程序。

在终端中输入:./s ,得到下面执行结果:

a is less then b

大家能够看到a的值为3,b的值为5,所以a明显小于b。假设我们想看看a大于b的执行结果。怎么办?改动a

的值,让它比b大,然后又一次编译执行。这位看官说的对,只是这样的方法相对来说比較消耗时间。

我们可

以在程序执行的过程中改动a的值,进而能够看到a大于b的结果。详细操作例如以下:

在终端中输入:gdb s           
//使用GDB调试程序

(gdb) start              
//開始调试

Temporary breakpoint 1 at 0x8048426: file m.c, line 6.

Starting program: xxx/s

Temporary breakpoint 1, main () at m.c:6

6        a = 3;

(gdb) n                  
//单步调试

7        b = 5;

(gdb)                     //输入回车。继续单步调试

9        if(a < b)

(gdb) set variable a=8   
//把a的值改动为8,比b的值大

(gdb) n                  
//单步调试

12            printf("a is larger then b \n");  
//显示a大于b的结果

(gdb)

大家从调试的结果中看到“a大于b”的结果了吧。通过这个样例。我们能够明确。在程序执行的过程 中。如

果想要验证某个结果,能够手动改动变量的值。让程序依照我们的要求来执行,进而能够验证程序执行的

结果是不是我们想要的哪个结果。

当程序在执行的时候,改动程序中的变量值,能够称作是一个十分强大的功能,由于它改动了正在执行中

程序的值,假如我们在程序中发现错误原因后。通常作法是改动错误,然后编译验证。有了该功能,能够

在调试过程中直接改动验证,从而省去了编译的麻烦。节省了时间。

看官们,关于GDB的内容,今天咱们就讲到这里。欲知后事怎样,且听下回分解。

一起talk GDB吧(第六回:GDB改动程序执行环境)的更多相关文章

  1. 用GDB调试程序(六)

    七.设置显示选项 GDB中关于显示的选项比较多,这里我只例举大多数常用的选项. set print address     set print address on         打开地址输出,当程 ...

  2. GDB学习之道:GDB调试精粹及使用实例

    一:列文件清单  1. List  (gdb) list line1,line2 二:执行程序  要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出 ...

  3. 使用GDB调试Android NDK native(C/C++)程序

    使用GDB调试Android NDK native(C/C++)程序 先说明下,这里所谓的ndk native程序跟Android上层java应用没有什么关系,也不需要涉及jni来封装native接口 ...

  4. 使用GDB调试Android NDK native(C/C++)程序-转

    最 近写了些需要跨平台兼容的C++库,Android是其中需要兼容的平台之一.区别于Windows,Mac中功能强大的IDE环境,官方并没有为 Android ndk提供太多的支持.因此,尝试了下通过 ...

  5. [skill][debug][gdb] 使用core dump 进行GDB

    core dump 扫盲:https://wiki.archlinux.org/index.php/Core_dump 1.  人为制作 core dump 1.1  实时在线生成core dump. ...

  6. Linux下交叉编译gdb,gdbserver+gdb的使用以及通过gdb调试core文件

    交叉编译gdb和gdbserver 1.下载gdb:下载地址为:http://ftp.gnu.org/gnu/gdb/按照一般的想法,最新版本越好,因此下载7.2这个版本.当然,凡事无绝对.我们以gd ...

  7. GDB调试系列之了解GDB

    想要熟练利用GDB进行程序调试,首先要了解什么是GDB. 1. 什么是GDB GDB (the GNU Project Debugger) 是一个可以运行在大多数常见的UNIX架构.Windows.M ...

  8. 一起talk C栗子吧(第一百二十六回:C语言实例--statickeyword)

    各位看官们,大家好,上一回中咱们说的内置宏的样例.这一回咱们说的样例是:static关键字. 闲话休提.言归正转. 让我们一起talk C栗子吧! 看官们,C语言提供了static关键字.它常常出如今 ...

  9. [你必须知道的.NET]第二十六回:认识元数据和IL(下)

    发布日期:2009.03.04 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 书接上回: 第二十四回:认识元数据和IL(上), ...

随机推荐

  1. ViewPager实现广告自动轮播核心代码(Handler+Thread)

    ViewPager数据源是4个线性布局,每个布局里面充满一张高度固定.宽度充满父布局的图片.有4个小圆点跟随ViewPager滑动.轮播原本我是用Timer+TimerTask的,但是问题颇多,很是郁 ...

  2. 修改linux多系统启动顺序

    Ubuntu和XP双系统grub2默认启动项设置为XP 装了双系统后,在开机时总会有想让一个系统默认启动的时候,一般安装完Ubuntu和XP双系统后,开机时默认的是启动Ubuntu系统,但是当想让XP ...

  3. maven 构建web项目index.jsp报错

    The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path... 解决 ...

  4. 《算法导论》读书笔记之动态规划—最长公共子序列 & 最长公共子串(LCS)

    From:http://my.oschina.net/leejun2005/blog/117167 1.先科普下最长公共子序列 & 最长公共子串的区别: 找两个字符串的最长公共子串,这个子串要 ...

  5. 面向对象程序设计-C++ Operator Overloading & Type conversion (Static)【第十一次上课笔记】

    本次上课继续讲解了 [ ] .-> 等运算符重载的具体例子 也讲解了C++单个参数的类的类型转换的案例 最后稍微提到了 static 的第三种作用:静态数据成员 具体详解我都已注释出来了,大家可 ...

  6. 笔记之Cyclone IV第一卷第三章器件中的存储器模块

    嵌入式存储器结构由一列列 M9K 存储器模块组成,通过对这些 M9K 存储器模块进行配置,可以实现各种存储器功能,例如:RAM.移位寄存器. ROM 以及FIFO 缓冲器. M9K 存储器模块支持以下 ...

  7. 深入解析MFC -- 句柄与对象的关系

    CWnd::FromHandlePermanent ——根据窗口句柄得到CWnd*指针 This function, unlike FromHandle, does not create tempor ...

  8. Ubuntu 12.04 (10) Personal Environment - @staticor

    Chinese Input ================= I use Wubu, so Fcitx, sudo add-apt-repository ppa:fcitx-team/nightly ...

  9. SystemTap----将SystemTap脚本编译成内核模块

      当运行SystemTap脚本时,会根据脚本生成一个内核模块,然后插入到系统中执行后退出.这个过程总共分为5个阶段:parse, elaborate, translate, compile, run ...

  10. 关于页ASP.NET面布局

    关于页面布局,充分利用Table和分层   从接触ASP.NET到现在已经有一段时间了,起初总是嫌麻烦,想找捷径,凡是想当然,结果导致自己反而走了不少的弯路. 起初刚开始接触ASP.NET的时候,发现 ...