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
相关文章
|
3月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
25天前
|
Unix Linux Shell
linux入门!
本文档介绍了Linux系统入门的基础知识,包括操作系统概述、CentOS系统的安装与远程连接、文件操作、目录结构、用户和用户组管理、权限管理、Shell基础、输入输出、压缩打包、文件传输、软件安装、文件查找、进程管理、定时任务和服务管理等内容。重点讲解了常见的命令和操作技巧,帮助初学者快速掌握Linux系统的基本使用方法。
58 3
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
机器学习/深度学习 Linux 编译器
Linux入门3——vim的简单使用
Linux入门3——vim的简单使用
58 1
|
2月前
|
Linux Shell Windows
Linux入门1——初识Linux指令
Linux入门1——初识Linux指令
31 0
Linux入门1——初识Linux指令
|
3月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
3月前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
120 6
|
2月前
|
存储 数据可视化 Linux
Linux 基础入门
Linux 基础入门
|
2月前
|
Linux Go 数据安全/隐私保护
Linux入门2——初识Linux权限
Linux入门2——初识Linux权限
28 0
|
3月前
|
Shell Linux Python
python执行linux系统命令的几种方法(python3经典编程案例)
文章介绍了多种使用Python执行Linux系统命令的方法,包括使用os模块的不同函数以及subprocess模块来调用shell命令并处理其输出。
53 0