Linux从入门到精通(九)——Linux编程 下

简介: Linux从入门到精通(九)——Linux编程 下

6. gdb调试器

GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具,它是一种强大的命令行调试工具。。一个合格的调试器需要有以下几项基本功能:

能够运行程序,设置所有能影响程序运行的参数;

能够让程序让指定的条件下停止。

能够在程序停止时检查所有参数的情况。

能够根据指定条件改变程序的运行。

6.1 gdb 基本用法

需要调试的程序,在编译时要使用调试选项。在默认的情况下,调试符号不会编译到程序中。调试之后,不需要重新编译程序。

gdb [可执行文件名]
出现
(gdb)#这里可以输入调试命令

注意:可执行文件编译的时候,必须加入参数-g,才可以使用gdb

6.2 gdb 常用命令

进入gdb调试界面后,可以输入以下命令:

list:显示程序内容,默认一次显示10行,如需继续,继续回车即可或者继续list。

list函数名:显示函数对应内容

list行号:显示该行周围的源代码

Set listsize 行数:设置显示代码的行数

Show listsize:显示当前listsize的设置

listfirst,last:显示first和list之间的内容

next:执行一行源代码但不进入函数内部

step:执行一行源代码并进入函数内部。

continue:继续运行,到下一个断点停止

run:执行当前被调试的程序。

quit:退出gdb 。

break n:在第n行设置断点,这将使程序执行到这里时被挂起。

break n 条件:当条件满足是,在该行断点生效。

break 12 if i==12

break 函数名:在函数的起始位置设置断点,这将使程序执行到这里时被挂起。

info break:显示断点信息。

Delete n:去除第n号断点

Disable n:暂停使用第n号断点

Enable n:启动第n号断点

Break :从后向前清除断点

print 变量名:显示变量的值

file 文件名:如果直接执行gdb,没有跟文件名,可以通过这个调入想要调试的可执行文件。

kill:终止正在调试的程序

watch:使你能监视一个变量的值而不管它何时被改变。

make使你能不退出gdb,就可以重新产生可执行文件。

shell:使你能不离开 gdb 就执行UNIX shell命令

Ctrl+c:发信号量中断当前操作

注意:

所有命令均可以使用命令的首字母来执行,例如list可以用l执行。

7. make 工程管理

问题:有多个源文件的时候,如何生成一个可执行文件?

方法1:

gcc -Wall -o mytest test1.c test2.c test3.c
# -Wall 允许发出gcc提供的所有有用的报警信息

方法2:

gcc -Wall -c test1.c
gcc -Wall -c test2.c
gcc -Wall -c test3.c
gcc -o mytest test1.o test2.o test3.o

可以发现是比较繁琐的,这时候就引入了make工程管理:

Make工程管理器是Linux下的一个“自动编译管理器”,“自动”是指它能够根据文件的时间戳,自动发现更新过的文件而减少程序编译的工作量。能够通过读入Makefile文件的内容来执行大量的编译工作,用户只需要编写一次简单的编译语句即可。Make工具大大提高了实际项目的工作效率,几乎所有Linux下的项目编程都会涉及它。

即:通过Makefile 文件,制定编译规则,根据时间戳,判断文件是否进行过修改。

Makefile编译规则格式:

目标名称: 依赖文件(一般是.o文件,如果没有,就会找对应的.c文件,)
<tab>命令

执行格式:

make 目标名称(如果省略,自动找第一个目标执行)

例如:

all: main.o foo1.o foo2.o
  # 虽然没有.o文件,但是会自动根据依赖文件是.c,就会根据.c文件自动生成对应名字的.o目标文件
  gcc main.o foo1.o foo2.o -o all
# 伪目标:不需要依赖文件,只执行命令
clean:
  rm -f *.o
make all

此时我们如果修改了foo1.c,按以前的方法,还需要重新编译,但是引入make工程管理,只需再次make就会自动编译。

make clean # 执行尾目标


相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
27天前
|
Linux 数据安全/隐私保护 Windows
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
30 0
|
29天前
|
算法 Linux C++
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
29 0
|
29天前
|
存储 算法 Linux
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
43 0
|
14天前
|
Unix 大数据 Linux
linux入门
linux入门
17 1
|
17天前
|
Linux 开发者
Linux文件编程(open read write close函数)
通过这些函数,开发者可以在Linux环境下进行文件的读取、写入和管理。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
85 4
|
22天前
|
传感器 Linux API
嵌入式Linux串口编程简介
嵌入式Linux串口编程简介
19 1
|
23天前
|
Linux 测试技术 C语言
【Linux】应用编程之C语言文件操作
【Linux】应用编程之C语言文件操作
|
29天前
|
算法 Linux API
【Linux系统编程】一文了解 Linux目录的创建和删除API 创建、删除与读取
【Linux系统编程】一文了解 Linux目录的创建和删除API 创建、删除与读取
28 0
【Linux系统编程】一文了解 Linux目录的创建和删除API 创建、删除与读取
|
1月前
|
监控 网络协议 Java
Linux 网络编程从入门到进阶 学习指南
在上一篇文章中,我们探讨了 Linux 系统编程的诸多基础构件,包括文件操作、进程管理和线程同步等,接下来,我们将视野扩展到网络世界。在这个新篇章里,我们要让应用跳出单机限制,学会在网络上跨机器交流信息。
Linux 网络编程从入门到进阶 学习指南
|
6月前
|
存储 Linux C语言
Linux:入门学习知识及常见指令
Linux:入门学习知识及常见指令