首页 > 系统相关 >第23天Linux下常用工具(二)

第23天Linux下常用工具(二)

时间:2024-11-14 16:47:27浏览次数:3  
标签:4.4 23 断点 makefile gdb 指令 Linux main 常用工具

目录

第四章 GDB调试工具

4.1gdb的作用

4.2调试代码的流程

4.3gdb的安装

4.4 gdb的使用

第五章 makefile工程管理工具

5.1makefile的作用

5.2makefile的运行

5.3make的安装

5.4makefile的编写方法

5.5makefile的语法

5.6makefile使用示例


第四章 GDB调试工具

4.1gdb的作用

代码调试工具,可以帮助调试代码

替代刚入门时使用一句一printf的调试方法,来找到代码出问题的地方

4.2调试代码的流程

测试:发现问题

定位:通过标志提示或删除功能,定位出问题的大概位置

修改:分析问题,改正问题

测试:验证结果

4.3gdb的安装

sudo apt-get install gdb

在线安装gdb

4.4 gdb的使用

4.4.1准备工作

gdb调试的代码,需要使用gcc的-g参数生成可执行文件的gdb

gcc -g main.c -o maingdb

4.4.2启动gdb

常规启动:

gdb ./maingdb

主函数传参启动:

方法一:

gdb --args ./maingdb 参数1 参数2...

方法二:在开启gdb之后,启动程序之前:

set args 参数1 参数2...

方法三:在开启gdb之后,启动程序之前:

run 参数1 参数2 ...

4.4.3退出gdb

退出gdb指令:q

4.4.4显示代码指令:list 或 l(小写 L)

l n #显示第 n 行附近的代码

例如查看12行附近的代码 

 4.4.5连续运行指令:run或r

代码从头开始执行,一直到结束停止,或者运行到断点位置暂停

遇到主函数传参(例如计算器程序中):r 10 + 20

argv[0]==r

argv[1]==10

argv[2]==+

argv[3]==20

或者:在传参后  

4.4.6设置断点指令:break或b

b n#在第n行设置断点

 4.4.7查看断点指令

info b

这里可以主要关注Enb列和What列

 4.4.8失能断点指令:disable

失能只是不生效了,并没有删除

disable 断点编号

4.4.9使能断点指令:enable

让断点失能后,就有恢复的需要

enable 断点编号

4.4.10删除断点指令clear或delete

clear 断点行号
delete 断点编号

试一下clear: 

试一下delete:

4.4.11 继续运行指令:cont 或 c

4.4.12 打印变量当前的值指令:print

print 变量名 #打印变量的值

4.4.13 单步调试启动指令:start

自动调用上一次运行时传入的参数

4.4.14 单步执行指令: n 或 s

n(next):遇到子函数,不会进入子函数内部,以函数为单位执行

s(step):遇到子函数,会进入子函数内部,以语句为单位执行

常用操作:遇到库函数按 n,不能进入,否则会卡死 遇到普通函数按 s

第五章 makefile工程管理工具

5.1makefile的作用

工程管理工具:名字为makefile的文件

将准备在终端中执行的指令,写入到该文件中(按照规定语法格式写)

5.2makefile的运行

若执行的文件名为makefile:直接在终端键入make,即可自动执行makefile文件中写入的指令

若执行的文件未命名未makefile:终端键入make -f 文件名

5.3make的安装

sudo apt-get install make

在线安装make工具

5.4makefile的编写方法

编写思想:目标和依赖的关系。

首先构思如何通过依赖生成目标,整个过程中一切指令都是为了生成最终目标

5.5makefile的语法

5.5.1注释

#注释

5.5.2 语法一

makefile中不能键入空格,只能键入Tab。否则无效。

目标:依赖
    命令        #通过依赖生成目标的命令

5.5.3 语法二

目标:
    命令        #可以直接执行的命令,不一定要得到目标

伪目标:没有依赖的目标

执行伪目标的指令:make 伪目标

5.5.4 变量
 

变量名=值         #定义变量
$(变量名)         #引用变量名对应的值

vim 底行模式:字符串自主选择替换--- :%s/gcc/$(cc)/gc

5.5.5 特殊变量

$@ 代表目标

$^ 代表所有依赖

$< 代表所有依赖中的第一个

% makefile 中的通配符

经过变量替换后,代码可以变成,除了计算机,大家都一眼看不懂的样子。

5.6makefile使用示例

这里我依然使用计算器的模块程序

首先实现静态库封装

inc=./inc
src=./src
out=./output
libpath=./lib
libname=static    #以上都是变量替换

main:main.c $(libpath)/lib$(libname).a
    gcc $< -l$(libname) -L$(libpath) -o $@ -I$(inc)
    @echo 编译完成
    ./main 1 + 1
$(libpath)/lib$(libname).a: $(out)/add.o $(out)/jian.o
    ar -rc $@ $^
    @echo 静态库制作完成
$(out)/%.o:$(src)/%.c
    gcc -c $< -o $@ -I$(inc)
clean:
    rm $(out)/*.o main $(libpath)/lib$(libname).a

其次,实现动态库封装

main:main.c ./lib/libmove.so
    sudo mv ./lib/libmove.so /usr/lib
    gcc main.c -lmove -I./inc -o main
    ./main 1 + 1
./lib/libmove.so:./output/add.o ./output/jian.o
    gcc -shared -fpic -o $@ $^
./output/%.o:./src/%.c
    gcc -c $< -o $@ -I./inc
clean:
    rm ./lib/libmove.so ./output/*.o main

整个工程管理有点倒置执行的意思,但总共执行那编译四步、编译两步,理清执行顺序就可以。

标签:4.4,23,断点,makefile,gdb,指令,Linux,main,常用工具
From: https://blog.csdn.net/Charary/article/details/143686497

相关文章

  • Linux基本指令(上)(1)
    文章目录前言一、touch二、mkdir三、ls四、pwd五、cd六、rmdir七、rm八、man九、cp十、mv总结前言我在引言篇并没有给出搭建Linux环境的具体措施,若有需求,你可以参考该篇博客搭建Linux环境的两种方式那作为第一课,在假设你已经成功完成了搭建的情况下,我们来学习一些......
  • Linux HTTP代理Squid 基本配置及目标白名单方式限制转发
    LinuxHTTP代理Squid基本变更配置及目标白名单方式限制转发https://www.cnblogs.com/iAmSoScArEd/p/18546341大部分保持默认即可1、文件管理转发白名单sudotouch/etc/squid/whitelistipsudotouch/etc/squid/whitelistdomain#目的地ip地址aclwhitelistipdst"/etc/s......
  • Linux线程
    线程1.1线程概述1.2线程常用API线程方法使用创建线程#include<pthread.h>intpthread_create(pthread_t*restricttidp,constpthread_attr_t*restrictattr,void*(*start_rtn)(void*),void*restrictarg);//返回值:若成功返回0,否则返回错误编号详情介绍:  ......
  • Linux基础入门2
    建议先看一声明:学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章。本文只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频微信公众号:泷羽sec文件系统权限Linux系统中一切都是文件1.查看权限ls......
  • 揭秘黑客手法:如何通过密码搜寻在 Linux 系统中实现权限提升
    文章目录前言1、密码搜寻–文件名和文件内容1.1、寻找有趣的文件名1.2、寻找有趣的字符串2、密码搜寻–Web文件/Config文件2.1、Config文件中的密码2.2、Web文件中的密码2.2.1、使用Hashcat破解密码3、密码搜寻–隐藏文件/文件夹3.1、隐藏文件/文件夹中的......
  • 中国工业统计年鉴(1949-2023年)(前身是中国工业经济统计年鉴)“
    01、数据简介一、《中国工业统计年鉴》是一部全面反映中国工业经济发展情况的资料性年刊,系统地收录了全国各经济类型、各工业行业和各省、自治区、直辖市等工业经济统计数据,以及主要指标历史数据。二、全书包括四大部分内容:综合数据、分行业数据、分地区数据和附录。主要......
  • Linux 磁盘、分区、文件系统、挂载
    1、磁盘Linux所有设备都被抽象成为一个文件,保存在/dev目录下。设备名称一般为hd[a-z]或sd[a-z]。如果电脑中有多硬盘,则设备名依次为sda、adb、sdc...以此类推IDE设备的名称为hd[a-z]。SATA、SCSI、SAS、USB等设备的名称称为sd[a-z]。 2、分区在Linux中,使用备名称+分区号......
  • 《Linux从小白到高手》综合应用篇:深入详解Linux swap及其调整优化
    1.引言:Swap是存储设备上的一块空间(分区),操作系统可以在这里暂存一些内存里放不下的东西。这从某种程度上相当于增加了服务器的可用内存。虽然从swap读写比内存慢,但总比没有好,算是内存不足时一种比较不错的解决方案。如果没有swap,则服务器一旦内存不足,就会开始终止应用以释......
  • linux系统文件打开数
    查看总的文件打开数lsof查看占用文件打开数最多的10个进制lsof|awk'{print$2}'|sort|uniq-c|sort-nr|head-n10#lsof|awk'{print$2}'|sort|uniq-c|sort-nr|head-n1031171104281139810061076110053836100435002144......
  • linux系统so动态库的搜索路径
    so动态库的搜索路径搜索的先后顺序编译目标代码时指定的动态库搜索路径环境变量LD_LIBRARY_PATH指定的动态库搜索路径配置文件/etc/ld.so.conf中指定的动态库搜索路径默认的动态库搜索路径/lib默认的动态库搜索路径/usr/libgcc编译指定动态库搜索路径-Wl,-rpath=<动态库......