2008服务器做网站,wordpress做定制T恤的网站,wordpress离线写文章,打开百度搜索引擎gdb工具#xff1a;
GDB的主要功能 断点设置#xff1a;允许开发者在特定的代码行设置断点#xff0c;当程序执行到该行时会自动暂停#xff0c;方便开发者进行调试和分析。 变量查看与修改#xff1a;在程序运行过程中#xff0c;可以查看和修改变量的值#xff0c;以…gdb工具
GDB的主要功能 断点设置允许开发者在特定的代码行设置断点当程序执行到该行时会自动暂停方便开发者进行调试和分析。 变量查看与修改在程序运行过程中可以查看和修改变量的值以便了解程序的运行状态。 代码执行控制可以单步执行代码包括步入、步过、步出也可以运行到特定行或函数从而更细致地观察程序的执行过程。 回溯和堆栈查看提供堆栈回溯功能可以查看函数调用栈了解函数调用顺序和当前执行的位置。 内存查看可以查看程序的内存使用情况包括读取和修改内存内容有助于发现内存泄漏、越界等问题。 进程控制可以启动、停止、继续、杀死被调试的程序方便进行各种调试操作。 命令脚本支持编写命令脚本实现自动化调试过程提高调试效率。
用法Linux
gcc -g 文件名 -o 执行文件名
gdb 执行文件名------进入调试页面
llist-----默认看十行代码
rrun-----跑程序代码
bbreakpoint-----设置一个断点代码运行到断点会停止
ccontinue------继续执行代码到下一个断点
nnext------一行一行的执行代码但是不会进入函数 首先设置一个断点然后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
例
OBJShuiwen.o my_rechar.o
ccgcc
OBJS1huiwen.c
OBJS2my_rechar.c
TARGET1huiwen.o
TARGET2my_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上面的是通用的写法用一个通用的变量名来代替可执行文件、目标文件和依赖文件这样后续我们编译其他文件的时候只需要修改最前面变量的内容即可就不需要再写一遍编译规则。