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
相关文章
|
1天前
|
运维 关系型数据库 MySQL
day03-Linux运维-Xshell优化和Linux系统命令入门(2)
day03-Linux运维-Xshell优化和Linux系统命令入门(2)
day03-Linux运维-Xshell优化和Linux系统命令入门(2)
|
1天前
|
运维 Linux Shell
day03-Linux运维-Xshell优化和Linux系统命令入门(1)
day03-Linux运维-Xshell优化和Linux系统命令入门(1)
day03-Linux运维-Xshell优化和Linux系统命令入门(1)
|
6天前
|
Linux 芯片 Ubuntu
Linux驱动入门 —— 利用引脚号操作GPIO进行LED点灯
Linux驱动入门 —— 利用引脚号操作GPIO进行LED点灯
|
6天前
|
Ubuntu Linux
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯-2
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯-2
|
6天前
|
Linux 芯片
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯-1
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯-1
|
6天前
|
Linux C语言 Ubuntu
Linux驱动入门——编写第一个驱动
Linux驱动入门——编写第一个驱动
Linux驱动入门——编写第一个驱动
|
6天前
|
Linux C语言 调度
|
6天前
|
Linux API
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
|
6天前
|
缓存 安全 Linux
Linux入门基本指令(2)
Linux入门基本指令(2)
13 0
|
6天前
|
Linux Windows
Linux入门基本指令(1)-2
Linux入门基本指令(1)
12 1