一起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的内容,今天咱们就讲到这里。欲知后事怎样,且听下回分解。
一起talk GDB吧(第六回:GDB改动程序执行环境)的更多相关文章
- 用GDB调试程序(六)
七.设置显示选项 GDB中关于显示的选项比较多,这里我只例举大多数常用的选项. set print address set print address on 打开地址输出,当程 ...
- GDB学习之道:GDB调试精粹及使用实例
一:列文件清单 1. List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出 ...
- 使用GDB调试Android NDK native(C/C++)程序
使用GDB调试Android NDK native(C/C++)程序 先说明下,这里所谓的ndk native程序跟Android上层java应用没有什么关系,也不需要涉及jni来封装native接口 ...
- 使用GDB调试Android NDK native(C/C++)程序-转
最 近写了些需要跨平台兼容的C++库,Android是其中需要兼容的平台之一.区别于Windows,Mac中功能强大的IDE环境,官方并没有为 Android ndk提供太多的支持.因此,尝试了下通过 ...
- [skill][debug][gdb] 使用core dump 进行GDB
core dump 扫盲:https://wiki.archlinux.org/index.php/Core_dump 1. 人为制作 core dump 1.1 实时在线生成core dump. ...
- Linux下交叉编译gdb,gdbserver+gdb的使用以及通过gdb调试core文件
交叉编译gdb和gdbserver 1.下载gdb:下载地址为:http://ftp.gnu.org/gnu/gdb/按照一般的想法,最新版本越好,因此下载7.2这个版本.当然,凡事无绝对.我们以gd ...
- GDB调试系列之了解GDB
想要熟练利用GDB进行程序调试,首先要了解什么是GDB. 1. 什么是GDB GDB (the GNU Project Debugger) 是一个可以运行在大多数常见的UNIX架构.Windows.M ...
- 一起talk C栗子吧(第一百二十六回:C语言实例--statickeyword)
各位看官们,大家好,上一回中咱们说的内置宏的样例.这一回咱们说的样例是:static关键字. 闲话休提.言归正转. 让我们一起talk C栗子吧! 看官们,C语言提供了static关键字.它常常出如今 ...
- [你必须知道的.NET]第二十六回:认识元数据和IL(下)
发布日期:2009.03.04 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 书接上回: 第二十四回:认识元数据和IL(上), ...
随机推荐
- ThinkPHP-3.2.3学习
一.下载安装 核心包:不用解释,最减版本 完整包:包括扩展功能(验证码.session等) 二.调试 ----www ---thinkphp_3 Application ...
- POJ 1159 回文LCS滚动数组优化
详细解题报告可以看这个PPT 这题如果是直接开int 5000 * 5000 的空间肯定会MLE,优化方法是采用滚动数组. 原LCS转移方程 : dp[i][j] = dp[i - 1][j] + ...
- Awesome Delphi
Awesome Delphi A curated list of awesome Delphi frameworks, libraries, resources, and shiny things. ...
- 在springmvc中controller的一个方法处理多个不同请求
value的uri值为以下三类: A) 可以指定为普通的具体值: B) 可以指定为含有某变量的一类值(URI Template Patterns with Path Variables): @Req ...
- #AzureChat - 自动伸缩和虚拟机
我们很高兴地推出再一次 #AzureChat,这是 @WindowsAzure 团队为您精心打造的一个在 Twitter 上进行的聊天活动! #AzureChat 专注于云计算的各个方面以及云开发的最 ...
- Python字符串原理剖析------万恶的+号
字符串原理剖析pyc文件,执行python代码时,如果导入了其他的.py文件,那么执行过程中会自动生成一个与其同名的.pyc文件,该文件就是python解释器变异之后产生的字节码 PS:代码经过编译可 ...
- python验证码识别
关于利用python进行验证码识别的一些想法 用python加“验证码”为关键词在baidu里搜一下,可以找到很多关于验证码识别的文章.我大体看了一下,主要方法有几类:一类是通过对图片进行处 理,然后 ...
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——3 计算4个函数
整个引擎代码在github上,地址为:https://github.com/sun2043430/RegularExpression_Engine.git nullable, firstpos, la ...
- iOS 使用Block实现函数回调
事实上.iOS中的Block就是C++中的函数指针,实现方式都是一样的,以下贴出一个简单的实践. 首先,创建一个回调的类 BlockStudy.h // // BlockStudy.h // Bloc ...
- ajax跨域请求--jsonp实例
ajax请求代码: //区域事件选择配送点 function changeDistrict(value){ if(value == 0){ $('#transport_node').empty(); ...