linux gdb网络调试工具,Linux--gdb调试工具

gdb是强大的调试工具,下面通过一个交换函数来初步认识他

main.c

#include

#include

void swap(int a, int b){

int t;

t = a;

a = b;

b = t;

}

int main()

{

int a = 3;

int b = 4;

swap(a, b);

printf("a = %d\n b = %d \n", a, b);

}

第一步:编译命令

gcc -g -Wall main.c -o main

解释:

gcc 是编译命令

-g 在输出的目标文件中包含调试信息

-Wall 产生警告信息

-o 指定编译输出文件名默认为a.out(为什么输出文件没有文件扩展名呢?参考另一篇笔记https://www.jianshu.com/p/f40188931d8b)

第二步:使用gdb

命令:

gdb main

输出:

GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1

Copyright (C) 2016 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law. Type "show copying"

and "show warranty" for details.

This GDB was configured as "x86_64-linux-gnu".

Type "show configuration" for configuration details.

For bug reporting instructions, please see:

.

Find the GDB manual and other documentation resources online at:

.

For help, type "help".

Type "apropos word" to search for commands related to "word"...

Reading symbols from main...done.

(gdb)

这样我们就进入了gdb模式,可以使用gdb命令对程序进行调试

第三步:列出程序行

命令:

(gdb) l

输出:

1 #include

2 #include

3

4 void swap(int a, int b){

5 int t;

6 t = a;

7 a = b;

8 b = t;

9 }

10

11 int main()

12 {

13 int a = 3;

14 int b = 4;

15 swap(a, b);

16 printf("a = %d\n b = %d \n", a, b);

17 }

第四步:加断点 (b + 行号)

命令:

(gdb) b 9

输出:

Breakpoint 1 at 0x400542: file main.c, line 9.

表示在内存0x400542处添加了第一个断点

第五步:运行程序并在断点处停止

命令:

(gdb) r

输出:

Starting program: /home/yourname/WorkSpace/codeblocks/hellolinux/main

Breakpoint 1, swap (a=4, b=3) at main.c:9

9 }

第六步:查看调用栈

命令:

(gdb)bt

输出:

#0 swap (a=4, b=3) at main.c:9

#1 0x000000000040056a in main () at main.c:15

该调用栈中存在两个栈帧(后文解释)

第七步:打印栈帧信息

命令:

p a

输出:

$1 = 4

调用栈描述的是函数之间的调用关系,它由多个栈帧组成每个栈帧对应着没有运行完的函数,栈帧中保存着该函数的信息比如:返回地址,局部变量等。程序执行到断点处时swap函数还没有调用完毕,依然存在调用栈中我们可以使用p命令来查看当前栈帧的的信息。通过上面的例子可以发现通过三变量法swap函数的形参a , b的值发生了交换

第八步:更换当前栈帧

命令:

(gdb)up

输出:

#1 0x000000000040056a in main () at main.c:15

15 swap(a, b);

同上打印出main函数中的a , b

(gdb) p a

$3 = 3

(gdb) p b

$4 = 4

通过上面的的调试结果我们发现实际上a , b的值并没有发生交换

第九步:退出调试

命令:

(gdb) q

输出:

A debugging session is active.

Inferior 1 [process 11524] will be killed.

Quit anyway? (y or n) y

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】国家开放大学2019年春季 2508学前儿童语言教育 参考试题

试卷代号:2508 2 0 1 9年春季学期期末统一考试 学前儿童语言教育 试题(半开卷) 2019年7月 注意事项 一、将你的学号、姓名及分校(工作站)名称填写在答题纸的规定栏内。考试 结束后,把试卷和答题纸放在桌上。…

工业级以太网交换机具有哪些优越特性

与商用交换机相比,工业交换机在性能上要稳定,需要耐受严苛的工作环境。工业交换机产品采用宽温设计,防护等级不低于IP30,支持标准和私有的环网冗余协议。那么,工业级以太网交换机具有哪些优越特性呢?接下来我们就跟随…

工业物联网的应用领域和方向

从一定的程度上来说,物联网可以说是个“旧瓶装新酒”的概念,提出物联网——IoT(Internet of things)这个概念的确算是一种创新,但是也要把这个创新和传统的M2M——机器互联(machine to machine)…

精选枚举代替开关

问题及其解决方案 开关/案例是用大多数命令式编程语言实现的通用控制结构。 开关比一系列的if / else更具可读性。 这是一个简单的示例: // Switch with int literal switch (c) {case 1: one(); break;case 2: two(); break;case 3: three(); break;default: thr…

【渝粤教育】国家开放大学2019年春季 2732土地利用规划 参考试题

试卷代号:2732 土地利用规划 试题 2019年7月 一、单选题(每小题3分.10小题,共30分) 1.降水量的单位为( )。 A.cm B.mm C.m D.ha 2.按照八大类土地…

物联网控制系统

物联网的发展和使用是跨时代的改变,在当今我们这个科技高速发展的时代,智能控制就是改善我们生活水平的主要方式。 随着物联网概念的深入,从智能路灯、智能家居到智慧农业、工业互联网,物联网不断的渗透到了各行各业当中&#xff…

linux基本指令chmod,Linux 常用命令

原标题:Linux 常用命令小编注:此篇文章来自#原创新人#活动,成功参与活动将获得额外100金币奖励此链接!自己开始接触 Linux「Ubuntu」应该是在大学期间, 接触 Unix「Mac OSX」是在工作后的第一份工作,吭哧吭…

POE供电的安全传输距离,网线的选择有哪些建议

POE供电的安全传输距离100米,建议使用超五类全铜网线。用标准以太网线缆传输直流电是可以传输很远的,那为什么传输距离会被限制在100米呢?接下来我们就跟随飞畅科技的小编一起来详细了解下POE供电的安全传输距离。 事实是POE交换机最大传输距…

zigbee是什么,为什么说它最适合智能家居设备

Zigbee是什么? 如果您的家里面有使用一款智能家居技术,那么这款技术就很有可能就是用的zigbee协议。Zigbee是一种无线通信协议,是基于IEEE820.15.4标准的低功耗局域网协议。是根据国际标准规定的,zigbee技术是一种短距离、低功耗的无线通信技…

java开发人员_Java 8:开发人员怎么看?

java开发人员由于Java 8发行倒计时已经开始,因此Java开发人员似乎肯定已经准备好参与其中。 根据Typesafe的一项调查 ,参与其中的开发人员中有65%回答说他们将在24个月的计划中迁移到Java 8,而从中有30%的开发者将在接…

lora模块在牛联网和智慧农业中的应用案列

LoRa为代表的低功率广域网(LPWAN)在全球范围中都得到了广泛的使用,由于它是一种开放式的通信标准,因此不仅是农场的专用网络到农业机械和农产平的状态监测等,都可以使用LoRa系列的产品。 牛联网 物联网不仅仅可以连接物…

工业交换机防护等级介绍

工业交换机防护等级,IP(INGRESS PROTECTION,进入防护)防护等级系统是由IEC(INTERNATIONAL ELECTROTECHNICAL COMMISSION,国际电工协会)所起草。将电器依其防尘防湿气之特性加以分级。这里所指的外物含工具,人的手指等均不可接触到…

休眠多对多教程

介绍: 在本教程中,我们将学习使用Hibernate ManyToMany注释定义和使用多对多实体关联。 上下文构建: 为了继续学习本教程,我们假设我们有两个实体- 雇员和资格: 众所周知,一名雇员可以拥有多个资格。 此外…

深度区分LoRa和LoRaWAN的区别

1.总体介绍 随着物联网技术的飞速发展,NB-IoT、LoRa、SigFox等通信技术名词我们也偶尔有所闻,对于普通人或者是刚刚接触物联网领域的人来说,在一大堆名词前面可能也是分布清楚,本文也将针对LoRa和LoRaWN做详细的介绍和比较。 总体…

工业交换机为何要老化测试

老化测试检测标准可以根据客户指定,无特殊要求即根据国家相应标准进行老化测试检验。老化测试主要是模拟产品在现实使用过程中的各种恶劣条件的高强度测试,同时根据使用的要求,合理地预测产品使用寿命。接下来飞畅科技的小编来为大家详细介绍…

物联网技术lora的简介和应用

物联网的通信传输技术,有很多种常用的方案,除了LORA以外,还有NB-IoT、WIFI、蓝牙、Zigbee、Dustl和sub-1GHz等,不同的通讯技术也有着不同的特点,和各自适合的应用场景。但是对于长距离。低功耗和小数据量的传输的应用场景&#xf…

cp ft wat_Java数组,Wat!

cp ft wat数组可以做一些令人惊讶的事情。 是否是数组? Serializable array new Serializable[9];数组是数组还是标量? 好吧,它是指向数组的标量。 就像 Object o new Object[9];您可以将数组分配给对象,因为它也是对象。 但是…

经典蓝牙和低功耗蓝牙(BLE)有什么区别?

蓝牙模块Bluetooth module)是指集成蓝牙功能的芯片基本电路集合,用于短距离2.4G的无线通讯模块。对于最终用户来说,蓝牙模块是半成品,通过在模块的基础上功能再开发、封装外壳等工序,实现能够利用蓝牙通讯的最终产品。…

工业交换机为什么需要进行高低温检测?

工业交换机采用宽温设计,-40℃~75℃的工作温度,是可以在极端条件下使用的工业级设备,每台工业交换机出厂都需要经过层层检测,接下来飞畅科技的小编就来为大家详细介绍下工业交换机为什么需要进行高低温的检测&#xff…

智能家居常用的十大应用场景

一、智能门锁:门锁为家庭安防第1条线,我们在享受智能化生活的同时,也同样要使家庭安全层次更上一层楼,所以我们的门锁具备联网功能,只要门锁被打开,信息就会同步到所有的手机客户端,什么是安全&…