当前位置: 首页 > news >正文

gdb和make工具

gdb工具:

GDB的主要功能

  1. 断点设置:允许开发者在特定的代码行设置断点,当程序执行到该行时会自动暂停,方便开发者进行调试和分析。

  2. 变量查看与修改:在程序运行过程中,可以查看和修改变量的值,以便了解程序的运行状态。

  3. 代码执行控制:可以单步执行代码(包括步入、步过、步出),也可以运行到特定行或函数,从而更细致地观察程序的执行过程。

  4. 回溯和堆栈查看:提供堆栈回溯功能,可以查看函数调用栈,了解函数调用顺序和当前执行的位置。

  5. 内存查看:可以查看程序的内存使用情况,包括读取和修改内存内容,有助于发现内存泄漏、越界等问题。

  6. 进程控制:可以启动、停止、继续、杀死被调试的程序,方便进行各种调试操作。

  7. 命令脚本:支持编写命令脚本,实现自动化调试过程,提高调试效率。

用法:(Linux)

gcc -g 文件名 -o 执行文件名

gdb 执行文件名------进入调试页面

l(list)-----默认看十行代码

r(run)-----跑程序代码

b(breakpoint)-----设置一个断点,代码运行到断点会停止

c(continue)------继续执行代码,到下一个断点

n(next)------一行一行的执行代码,但是不会进入函数

        首先设置一个断点,然后r跑程序,程序运行到断点停止,使用n接着往下一行一行执行代码,由图可以看出,当执行到我的自定义函数show之后再n执行下一行就到了return,并没有进入我的show函数。

s-----一行一行执行代码,但是会进入函数

 

       首先设置一个断点,然后r跑程序,程序运行到断点停止,使用s接着往下一行一行执行代码,由图可以看出, 当我执行到第19行我的自定义函数的时候,在s执行下一行它就会进入到我的自定义函数里面去一行一行执行;这里除了自定义的函数,库函数也会进入。

d 断点序号 ------删除对应序号的断点,如果d后面什么都不加,默认删除所有断点

p 变量名 -------输出变量名的值

        在断点之后使用n一行一行执行代码,当执行到循环时,使用p i就可以查看这一次循环i的值为多少,当我们执行代码发生错误或者死循环时就可以使用它来查看循环中哪里出了问题。

q -----退出gdb调试

make工具:

make工具是一个解释器 ,用来解释makefile文件,它会默认在当前路径下执行makefile或者Makefile

作用:节省大量时间,只会根据文件修改的时间戳的改变而编译对应的文件,没有改变的不会再重复编译

时间戳:文件最近一次修改的时间

常用makefile一般形式:

目标文件:依赖文件

(Tab空格)编译规则

目标文件:通过编译规则之后得到的文件

依赖文件:生成目标文件所需要编译的文件,如果没有依赖文件,会继续寻找生成依赖文件的依赖文件,直到找完所有依赖文件或者报错为止

gcc编译的四个步骤:

1、预处理,展开文件的头文件和宏定义

gcc -E 1.c -o 1.i

2、编译,检查语法错误

gcc -S 1.i -o 1.s

3、汇编,生成计算机能够识别的二进制文件

gcc -c 1.s -o 1.o

4、链接、生成最终执行文件

gcc 1.o -o a.out

例:

OBJS=huiwen.o my_rechar.o
cc=gcc
OBJS1=huiwen.c
OBJS2=my_rechar.c
TARGET1=huiwen.o
TARGET2=my_rechar.o${TARGET}:${OBJS}${cc} ${OBJS} -o ${TARGET}
${TARGET1}:${OBJS1}${CC} -c ${OBJS1} -o ${TARGET1} 
${TARGET2}:${OBJS2}${cc} -c ${OBJS2} -o ${TARGET2}
clean:rm ${OBJS} ${TARGET}#h:huiwen.o my_rechar.o
#	gcc huiwen.o my_rechar.o -o h
#huiwen.o:huiwen.c
#	gcc -c huiwen.c -o huiwen.o
#my_rechar.o:my_rechar.c
#	gcc -c my_rechar.c -o my_rechar.o
#clean:
#	rm huiwen.o my_rechar.o h

解析:这里的huiwen.c、my_rechar.c是功能函数和主函数,还有一个huiwen.h是放头文件的,下面带#号的就是一般写法,通过.o文件生成可执行文件,然后.o文件又是由.c文件生成,最后的clean是删除生成的.o文件,以便于我们更改之后重新make;上面的是通用的写法,用一个通用的变量名来代替可执行文件、目标文件和依赖文件,这样后续我们编译其他文件的时候只需要修改最前面变量的内容即可,就不需要再写一遍编译规则。

http://www.lryc.cn/news/478041.html

相关文章:

  • 【d66】【Java】【力扣】174.寻找二叉搜索树中的目标节点
  • Spring Boot关闭时,如何确保内存里面的mq消息被消费完?
  • HTML 基础标签——文本内容标签 <ul>、<ol>、<blockquote> 、<code> 等标签的用法详解
  • 高效管理社团:Spring Boot在校园社团信息管理中的应用
  • mysql约束和高级sql
  • 蓝桥杯真题——三角回文数(C语言)
  • uni-app 封装图表功能
  • Kubernetes的基本构建块和最小可调度单元pod-0
  • QT创建按钮篇
  • 初级软件测试工程师就别出口喊15K了,连自动化测试都不会,还不如应届生
  • Mybatis查询数据库,返回List集合,集合元素也是List。
  • SQL 视图:概念、应用与最佳实践
  • ubuntu交叉编译expat库给arm平台使用
  • 成都郝蓉宜恺文化传媒有限公司以诚信经营赢得客户长期信赖
  • LabVIEW for Linux 介绍
  • 一次32bit有符号数据类型转换为64bit无符号数据类型引发的溢出错误
  • aosp安卓15新特性dump的wms窗口层级树优化的更加美观
  • git的使用、router和route的区别以及v-show和v-if的差别
  • Win系统通过命令行查看笔记本电池损耗/寿命/健康
  • 【安当产品应用案例100集】029-使用安全芯片保护设备核心业务逻辑
  • Redis高级篇之缓存一致性详细教程
  • C++ 文件操作详解
  • 计算机网络:网络层 —— 边界网关协议 BGP
  • Python数据可视化seaborn
  • Java继承练习
  • Excel怎么转换成word?分享两种方法!
  • nignx代理获取真实地址request.getRequestURL()
  • 登录注册窗口(二)
  • go channel 通道
  • 论文阅读:Computational Long Exposure Mobile Photography (二)