2014-06-14
GDB是GNU发布的一款功能强大的程序调试工具。GBD主要完成下面三个方面的功能:
1,启动被调试程序。
2,让被调试的程序在指定的位置停住。
3,当程序被停住时,可以检查程序状态(如变量值)。
1,编译生成可执行文件
gcc -g test.c -o test
2,启动GDB
gbd test
或者
gdb
file test
3,在 XXX 函数处设置断点
break main (或者 b main)
4,运行程序
run (或者 r)
5,单步运行
next (n)
6,继续运行
continue (c)
7,退出GDB
quit (q)
* list (l) 查看程序
* break (b) 函数名 在某函数入口处添加断点
* break (b) 行号 在指定行添加断点
* break (b) 文件名:行号 在指定文件的指定行添加断点
* break (b) 行号 if 条件 当条件为真时,指定行号处断点生效,例 b 5 if i=10
当 i 等于 10 时第5行断点生效
* info break 查看所有设置的断点
* delete (d) 断点编号 删除断点
* run (r) 开始运行程序
* next (n) 单步运行程序(不进入子函数)
* step (s) 单步运行程序(进入子函数)
* continue (c) 继续运行程序
* print (p) 变量名 查看指定变量值
* finish 运行程序,直到当期函数结束
* watch 变量名 对指定变量进行监控
* quit (q) 退出 gdb
==================================================================
Makefile (术语)
规则:用于说明如何生成一个或多个目标文件,规则格式如下:
targets:prerequisites
command
目标 依赖 命令 (命令前是 tab 键)
例: main.o:main.c
gcc -c main.c
在makefile中,规则的顺序是很重要的,因为,makefile中只应该有一个最终目标,
其他的目标都是被这个目标所连带出来的,所以一定要让make知道你的最终目标是什么。
一般来说,定义在makefile中的目标可能会有很多,但是第一条规则中的目标将被确立
为最终的目标。
make命令默认在当前目录下寻找名字为 makefile/Makefile的工程文件,当名字不为
这两者之一时,可以使用如下方法指定:
make -f 文件名
Makefile中把那些没有任何依赖只有执行动作的目标称为“伪目标”(phony targets)
例: .PHONY:clean
clean:
rm -f hello main.o
".PHONY"将"clean"目标声明为伪目标
====== 变量 =========
obj=main.o func1.o func2.0
hello:$(obj)
gcc $(obj) -o hello
obj为变量
在makefile中,存在系统默认的自动化变量
* $^ : 代表所有的依赖文件
* $@ : 代表目标
* $< : 代表第一个依赖文件
例: hello:main.o func1.o func2.o
gcc main.o fun1.o func2.o -o hello
===>>
hello:main.o func1.o func2.o
gcc $^ -0 $@
makefile中"#"字符后的内容被视作注释。
@ :取消回显
例: hello:hello.c
@gcc hello.c -o hello
GDB是GNU发布的一款功能强大的程序调试工具。GBD主要完成下面三个方面的功能:
1,启动被调试程序。
2,让被调试的程序在指定的位置停住。
3,当程序被停住时,可以检查程序状态(如变量值)。
1,编译生成可执行文件
gcc -g test.c -o test
2,启动GDB
gbd test
或者
gdb
file test
3,在 XXX 函数处设置断点
break main (或者 b main)
4,运行程序
run (或者 r)
5,单步运行
next (n)
6,继续运行
continue (c)
7,退出GDB
quit (q)
* list (l) 查看程序
* break (b) 函数名 在某函数入口处添加断点
* break (b) 行号 在指定行添加断点
* break (b) 文件名:行号 在指定文件的指定行添加断点
* break (b) 行号 if 条件 当条件为真时,指定行号处断点生效,例 b 5 if i=10
当 i 等于 10 时第5行断点生效
* info break 查看所有设置的断点
* delete (d) 断点编号 删除断点
* run (r) 开始运行程序
* next (n) 单步运行程序(不进入子函数)
* step (s) 单步运行程序(进入子函数)
* continue (c) 继续运行程序
* print (p) 变量名 查看指定变量值
* finish 运行程序,直到当期函数结束
* watch 变量名 对指定变量进行监控
* quit (q) 退出 gdb
==================================================================
Makefile (术语)
规则:用于说明如何生成一个或多个目标文件,规则格式如下:
targets:prerequisites
command
目标 依赖 命令 (命令前是 tab 键)
例: main.o:main.c
gcc -c main.c
在makefile中,规则的顺序是很重要的,因为,makefile中只应该有一个最终目标,
其他的目标都是被这个目标所连带出来的,所以一定要让make知道你的最终目标是什么。
一般来说,定义在makefile中的目标可能会有很多,但是第一条规则中的目标将被确立
为最终的目标。
make命令默认在当前目录下寻找名字为 makefile/Makefile的工程文件,当名字不为
这两者之一时,可以使用如下方法指定:
make -f 文件名
Makefile中把那些没有任何依赖只有执行动作的目标称为“伪目标”(phony targets)
例: .PHONY:clean
clean:
rm -f hello main.o
".PHONY"将"clean"目标声明为伪目标
====== 变量 =========
obj=main.o func1.o func2.0
hello:$(obj)
gcc $(obj) -o hello
obj为变量
在makefile中,存在系统默认的自动化变量
* $^ : 代表所有的依赖文件
* $@ : 代表目标
* $< : 代表第一个依赖文件
例: hello:main.o func1.o func2.o
gcc main.o fun1.o func2.o -o hello
===>>
hello:main.o func1.o func2.o
gcc $^ -0 $@
makefile中"#"字符后的内容被视作注释。
@ :取消回显
例: hello:hello.c
@gcc hello.c -o hello