一、make工具和makefile文件
1.显示规则
【语法】
target: prerequisites...
[tab]command
Tips:可以有多行命令。同一行多命令需要用&&或者;连接,\续行。cd只影响所在的命令行。
依赖关系:
e.g:hello:hello.c
or:hello:hello.o
hello.o:hello.c
编译命令:
e.g:[tab]gcc hello.c -o hello
Tips:修改源文件后用make更新。
all: 依赖文件
Tips:makefile只执行第一个目标,所以将all设为第一个目标。
include包含文件。
命令:make
【功能】在当前文件夹下寻找“makefile”文件
【选项】-f:指定使用文件
命令:make clean
【功能】清除文件
clean:
rm-f *~ ...
命令:make install
【功能】下载
动作:
install:
mvxxx /bin
2.隐晦规则
后缀规则:
.c.o:
gcc-c $<
模式规则:
%.o:%.c
gcc$(CFLAGS) -c $<
3.变量定义
定义:object = filename.c/.o...
引用:$(object)访问
Tips:${}引用的是环境变量。
4.编写makefile进行编译
二、GDB调试
1. gdb命令
启动:gdb filename.out
run
运行
n/next
单步运行,到下一行
kill
停止调试
q/quit
退出调试
help
显示命令类别
list
显示源代码
b/break
设置断点
infobreak
显示当前断点
delete
删除所有断点
disable
禁用断点
enable
启用断点
clear
删除当前断点
where
查看错误的行号
step
跳入函数
finish
结束函数执行
shellcommand
执行shell命令
p/print
打印变量
c/continue
继续运行
return
强制函数返回
jump
跳到指定行
2.段错误
可能情况:
①访问的内存超出了系统给该程序所设定的内存空间
②访问了不存在的内存地址
③访问系统保护的内存地址
④访问只读的内存地址
⑤栈溢出
调试方式:
①ulimit -c1024
开辟1024Byte空间抓取段错误
②gdb ./filename
调试文件,抓取错误,生成core文件
③core-file core.xxxx
用gdb调试core文件
④bt
打印错误的堆栈信息
遇到问题:
错误:程序中有游离的'\302'
错误:程序中有游离的'\240'
使用命令:od -c filename.c
查看'\302'、'\240'出现的位置,进行清除。
错误:No symbol table is loaded. Use the "file" command.
原因:①可能是因为编译时未使用-g命令。
②可能是因为在makefile中将-g用于编译命令,使用一个变量object=-g代替。
③可能是因为gdb后未加上需要调试的文件名。
反思:实训第三天,学了makefile和gdb,linux系统下也可以调试代码了。明天就开始做项目了,抓紧时间再巩固一下linux的知识。