Ubuntu 16.04下GDB调试
在linux中还有一个更受大家欢迎的调试工具:GDB。GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。可以用来调试C,C++程序。
GDB功能强大,调试命令也有很多,但是对于普通程序调试中经常使用的命令并不多,如下表所示:
常用的指令:
例子程序如下所示:
#include <stdio.h> int getSum(int num1,int num2); int main(int argc, char *argv[])
{
int num1 = ;
int num2 = ;
int sum = ; num1 = num1 - ; sum = getSum(num1,num2); printf("The sum is %d\n", sum); return ; } int getSum(int num1,int num2)
{ printf("The numbers are %d and %d\n", num1,num2); return (num1 + num2);
}
第一步:
对源程序进行编译,加上-g选项,使其可以进行调试。其结果是生成可执行文件test_gdb,并且可以对其进行gdb调试(对于该命令的详细解释,可以查看gcc命令)
第二步:
进入gdb调试:
如上图最后一行所示,代表进入gdb调试,等待用户命令输入。
第三步:
加载进行调试的可执行文件,方便进行调试,以及源程序的显示。命令如下:
显示加载成功。
第四步:
(1)如果在设置断点之前,输入r
程序正常运行,打印输出结果,并正常退出。
(1)在运行之前,设置断点,为了确定设置断点的位置(行号)可以使用list(l)命令,显示出程序的内容,从而方便的设置断点
(2)设置断点
第一个断点设置在main函数的入口处,第二,三个断点为普通断点,第四个断点设置在函数调用的入口处,第5个断点为条件断点。
(3)开始调试运行
输入r开始运行,在第一个断点处(即main函数入口)停止运行。
此时打印输出num1的值,显示的并不是20,而是一个随机值,因为此时还没有完成初始化操作,如下所示:
输入n执行下一步,此时再次打印输出num1,即可完成初始化。
输入c,执行到第二个断点处停止运行。如下图所示
当程序执行到getSum函数的调用处时,执行s,进入到getSum函数内部,继续调试执行
一直进行单步调试,直到函数结束运行,退出函数的调用
在getSum函数结束之前以及结束之后分别打印输出sum值:
很明显,函数getSum完成计算num1与num2的和之后并对sum赋值。
最后程序结束运行.
每日一句:善日者强,善时者霸 --荀子
参考文档:https://blog.csdn.net/longshen1990/article/details/47778269
Ubuntu 16.04下GDB调试的更多相关文章
- Ubuntu 16.04下EasyOpenJTAG+OpenOCD的安装和使用【转】
本文转载自:http://www.linuxdiyf.com/linux/24086.html Ubuntu 16.04下EasyOpenJTAG+OpenOCD的安装和使用 发布时间:2016-09 ...
- Ubuntu 16.04 下使用Xampp
Ubuntu 16.04 下使用Xampp 什么是Xampp? XAMPP(Apache+MySQL+PHP+PERL) 是一个功能强大的建站集成软件包.这个软件包原来的名字是 LAMPP,但是为了避 ...
- Ubuntu 16.04下使用Eclipse:创建工程时卡死的解决方法
问题如下: Ubuntu 16.04下使用Eclipse创建工程时出现卡顿和卡死,新建一个MapReduce项目卡了一下午,鼠标变成了圆圈进度条转了一下午,还关不掉. 当我直接去关闭新建项目的窗口时, ...
- Ubuntu 16.04 下简单安装使用golang之备忘
刚开始学习Go语言,这里记录下我在Ubuntu 16.04下安装使用golang的过程,方便以后查询. 一.安装 1.添加源 如果使用默认的源安装golang的话,版本太低,只到1.6 ...
- Ubuntu 16.04下编译安装Apache2.4和PHP7结合
Ubuntu 16.04下编译安装Apache2.4和PHP7结合,并安装PDOmysql扩展. 1.编译安装apache2.4.20 1 第一步: ./configure --prefix=/usr ...
- Ubuntu 16.04下安装MacBuntu 16.04 TP 变身Mac OS X主题风格
Ubuntu 16.04下安装MacBuntu 16.04 TP 变身Mac OS X主题风格 sudo add-apt-repository ppa:noobslab/macbuntu sudo a ...
- Ubuntu 16.04下的LAMP环境配置
在学习开发过程中,每当遇到新的问题时,通常都能在网上搜到解决的方法,但是网上的方法千千万,有些是已经过时了的,有些是跟自己开发环境不同的,总是不能第一时间能找到答案. 而当时遇到的问题可能在今后的开发 ...
- Ubuntu 16.04下安装64位谷歌Chrome浏览器
1.进入 Ubuntu 16.04 桌面,按下 Ctrl + Alt + t 键盘组合键,启动终端. 也可以按下 Win 键(或叫 Super 键),在 Dash 的搜索框中输入 terminal 或 ...
- Ubuntu 16.04下安装谷歌浏览器(转)
1.进入 Ubuntu 16.04 桌面,按下 Ctrl + Alt + t 键盘组合键,启动终端. 2.在终端中,输入以下命令,将下载源加入到系统的源列表. sudo wget http://www ...
随机推荐
- EasyPR源码剖析(7):车牌判断之SVM
前面的文章中我们主要介绍了车牌定位的相关技术,但是定位出来的相关区域可能并非是真实的车牌区域,EasyPR通过SVM支持向量机,一种机器学习算法来判定截取的图块是否是真的“车牌”,本节主要对相关的技术 ...
- 对js原型及构造函数的相关理解
一.js中的原型创建(声明)一个函数,浏览器在内存中会创建一个对象.每个函数都默认会有一个属性prototype指向了这个对象,就是说prototype的属性的值就是这个对象.此对象就是该函数的原型对 ...
- laravel 填充器Seed
我们在进行多人开发时,发现运行php artisan db:seed --class=填充器名称 发现有报错 Exception trace: 1 ReflectionClass::__constru ...
- 使用nginx反向代理实现隐藏端口号
使用nginx反向代理实现隐藏端口号 在服务器上下载安装nginx,主要是修改配置nginx.conf. 用proxy_pass里面配置要转发的域名+端口,相当于这一部分是被域名替换的部分,在http ...
- 关于微信小程序切换获取不到元素的问题
1.由于公司要实现微信小程序的自动化,所以开始学习python + appium 实现微信小程序自动化.在学习过程中遇到在切换webview后获取不到页面元素的问题,导致无法继续.今天在网上看到一篇关 ...
- Chapter5_初始化与清理_数组初始化与可变参数列表
一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥 ...
- IE9及以下input无背景时,层级混乱问题
IE9及以下版本:input输入框 background:none;时,层级比input的低的元素会显示在input之上,导致input点击不了. 解决方案: background:url(" ...
- #实验三 敏捷开发与XP实践---实验报告
一.实验三 敏捷开发与XP实践-1 1.实验要求 -实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成I ...
- 89、instancetype和id的区别
1>instancetype在类型表示上,跟id一样,可以表示任何对象类型 2>instancetype只能用在返回值类型上,不能像id一样用在参数类型上 3>instancetyp ...
- Concept Drift(概念漂移)
Introdution concept drift在机器学习.时间序列以及模式识别领域的一种现象.如果是在机器学习领域中,这个概念指的就是一个模型要去预测的一个目标变量,概念漂移就是这个目标变量随着时 ...