一起talk GDB吧(第六回:GDB改动程序执行环境)

各位看官们,大家好,上一回中我们说的是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的内容,今天咱们就讲到这里。欲知后事怎样,且听下回分解。

时间: 2024-12-05 15:57:01

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

一起talk GDB吧(第六回:GDB修改程序运行环境)

各位看官们,大家好,上一回中我们说的是GDB查看信息的功能,并且说了如何使用GDB查看程序运行时的 信息.这一回中,我们继续介绍GDB的调试功能:修改程序运行环境.当然了,我们也会介绍如何使用GDB 修改程序运行环境.闲话休提,言归正转.让我们一起talk GDB吧! 大家都知道程序运行时需要一个运行的环境,比如从系统中分配内存,让程序读取一些数据等等.我们接 下来说一说,如何修改程序的运行环境,这样可以让程序按照我们我要求来运行.在修改程序运行环境中 最常用的是修改变量的值. 作为一款优秀的调

一起talk GDB吧(第一回:GDB介绍)

各位看官们,大家好,从今天开始,我们讲大型章回体科技小说 :GDB.闲话休提,言归正转.让我们一 起talk GDB吧! 看官们,我们常说的GDB是一个绰号,它真正的名字是:The GNU Project Debugger.中文叫作GNU程序 调试器.和GCC一样,因为这个绰号的名声太大了,所以大家都这么称呼它.GDB生于八十年代,也是一 个典型的80后.它和GCC是亲兄弟,至于谁是哥哥,谁是弟弟,我也不清楚,哈哈.不过有一点是可以肯 定的,它的父亲也是美国人Richard Stallman.不

一起talk GDB吧(七回:GDB监视功能)

各位看官们,大家好,上一回中我们说的是GDB修改程序运行环境的功能,并且说了如何使用GDB修改变量 的值.这一回中,我们继续介绍GDB的调试功能:监视功能.当然了,我们也会介绍如何使用GDB的监视功 能.闲话休提,言归正转.让我们一起talk GDB吧! 我们说的监视类似像电影中描述的哪种监视,只不过电影中的被监视对象通常是一些犯罪嫌疑人,而我们 的监视对象是运行着的程序,更具体点说,是程序中的存储单元地址.GDB提供了监视功能,首先设置一个 监视点,GDB会自动监视该监视点上的变化了,如果监视

第六课 GDB调试 (上)

序言: 初学者经过学习前面的Makefile知识,信心满满,内心觉得应该要好好学习不单掌握语言的编写,也要学会相对应的工具调高开发效率.有时我们写出来的代码经过执行结果却跟我们预期不一样那怎么办呢,这个时候就要调试了.说到调试有经验的开发童鞋知道在windows下游大名鼎鼎的VS集成平台,那么在linux下呢,特别是编写C.C++有什么工具可以方便我们调试呢,这里我给大家推荐的就是GDB,它也是GNU的debugger,专门为调试而生的. 知识点: gdb的大致分为以下功能: 1.启动程序: 2

用GDB调试程序(六)

七.设置显示选项 GDB中关于显示的选项比较多,这里我只例举大多数常用的选项. set print address     set print address on         打开地址输出,当程序显示函数信息时,GDB会显出函数的参数地址.系统默认为打开的,如:                (gdb) f        #0  set_quotes (lq=0x34c78 "<<", rq=0x34c88 ">>")         

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

交叉编译gdb和gdbserver 1.下载gdb:下载地址为:http://ftp.gnu.org/gnu/gdb/按照一般的想法,最新版本越好,因此下载7.2这个版本.当然,凡事无绝对.我们以gdb-7.2.tar.bz2 这个文件为例.2.解压缩: $ tar jxvf gdb-7.2.tar.bz2 注:小技巧:Linux下一般压缩文件后缀为.tar.bz2和.tar.gz,它们解压命令有两三个选项是一致的: xf(v),前者再加上j选项,后者再加上z选项. 3.进入该目录 $ cd g

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

使用GDB调试Android NDK native(C/C++)程序 先说明下,这里所谓的ndk native程序跟Android上层java应用没有什么关系,也不需要涉及jni来封装native接口,通俗来讲,就是把编译好的纯C/C++程序,push到Android设备或者仿真器上,然后在设备上运行该程序.而调试则是通过attach到gdbserver来实现.推荐在Ubuntu或者mac osx下来进行,windows下要安装cygwin来模拟posix环境,速度很慢的说.具体操作如下: 0.

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

最 近写了些需要跨平台兼容的C++库,Android是其中需要兼容的平台之一.区别于Windows,Mac中功能强大的IDE环境,官方并没有为 Android ndk提供太多的支持.因此,尝试了下通过一些配置使用gdb来调试Android ndk的C++程序,感觉还算方便,记录下来跟大家分享. 先 说明下,这里所谓的ndk native程序跟Android上层java应用没有什么关系,也不需要涉及jni来封装native接口,通俗来讲,就是把编译好的纯C/C++程 序,push到Android设

第六回 煤渣场对垒藏高人 小饭馆煮面论英雄[林大帅作品连载]

第六回 煤渣场对垒藏高人 小饭馆煮面论英雄    诗曰: 古道热肠情谊浓,铁砚豪杰事已空. 今宵何似煮酒夜,五魁声里忆峥嵘.        却说林二二人前往蹴鞠场,当日石头路旧院比不得擢英砺青宽敞,这场也只饭堂前方寸之地.日后林二有幸在哲理场上驰骋,自不可同日而语.不过今日难得见小谢兴致不错,自是一番热情相陪.林二方进文会时,每日只知街上晃荡,书店里耽搁.不过也敬这小谢治学功夫,他也常劝林二,多做些文章才是.平日里也不忘邀林二探讨点学问,或彼此切磋,故而甚相契重.但这蹴鞠场上,林二却是好手,不说