gdb学习(一个)[再版]
概要
gdb是GNU debugger的缩写,是编程调试工具。
功能
1、启动程序,能够依照用户自己定义的要求随心所欲的执行程序。
2、可让被调试的程序在用户所指定的断点处停住 (断点能够是条件表达式)。
3、当程序停住时,能够检查此时程序中所发生的事。
4、动态改变程序的执行环境。
演示样例:
gcc -Wall -g simple.c -o simple
#一定要记得加上-g选项,以便生成调试信息
启动gdb:gdb [-q] [executable-file] [core-file]
gdb simple
#启动gdb
list(l)
#查看程序的十行代码,连续键入list命令,可查看该文件全部代码
break(b) n
#在第n行设置断点
info break(i b)
#查看断点设置信息
break function-name (b function-name)
#在函数的入口处设置断点
run(r)
#启动程序,在断点处暂停
step(s)
#单步跟踪,一步步走
print i(p i)
#打印i当前值
until
#跳出循环
continue(c)
#继续执行,直到下一个断点。假设一直执行到程序结束,则会打印程序结束信息
enter键(回车)
#表示使用上一个命令
finish
#退出当前函数,打印函数的返回值
delete n
#删除断点n
quit(q)
#退出整个gdb调试程序
执行程序
1、run(r) #执行程序。直到第一个断点或程序结束
2、run arg1 arg2 … #执行程序并加上參数,如:r a b c d ...
查看源代码
list(l) - 查看近期10行源代码
list fun-name - 查看fun函数源代码
list file:fun-name – 查看file文件里的fun函数源代码
如:l search.c:seq_search #假设仅仅有一个文件包括有seq_search函数。则不必加”search.c:”
list [m,n]
list 2,10 – 查看从第2行到第10行源代码
list ,15 – 查看最多到第15行的源代码
设置断点与观察点
break [line-num]
break [fun-name]
break [file-name:line-num] #b search.c:4
break [file-name:fun-name]
break if <condition> - 条件成立时程序停住
E.g. break if i = 10
info break(i b) – 查看断点
watch expr – 一旦expr值发生改变,程序就停住。【设置观察点】
E.g. watch i #一旦i值发生改变。则程序暂停
delete n(d n) – 删除断点n # d 1 d 1 2 3
单步调试
continue(c)
- 执行至下一个断点
step(s)
- 单步跟踪,进入函数内部,相似于Vs中的step in[可是不会进入没有提供源代码的函数]
next(n)
- 单步跟踪,不进入函数内部。相似于VC中的step out
finish
- 执行程序,直到当前函数完毕返回。并打印函数返回时的堆栈地址和返回值及參数值等信息。可是不会跳出main函数。
until
– 执行程序直到退出循环体。假设一次没有跳出。则执行下一次
return [value]
- 停止当前函数,提前让函数返回[动态调整程序的执行],将value返回调用者,相当于step return
set variable var-name = value
- 改变一个变量的值
gdb经常使用命令总结
命令 | 作用 |
run(r) | 执行,启动程序 |
list(l) | 列出10行源程序 |
break(b) | 设置断点 |
info break(i b) | 打印断点具体信息 |
continue(c) | 继续执行程序。直到下一个断点 |
watch | 设置观察点 |
step(s) | 单步跟踪,相似于VC中的step in |
next(n) | 单步跟踪,相似于VC中的step out |
finish | 执行程序,直到当前函数返回。返回函数 |
until(u) | 跳出循环(有时须要两次) |
print(p) | 查看执行时变量及表达式 |
help | 打印帮助信息 |
附-
#Makefile
CC = gcc
CFLAGS = -Wall -g
BIN = sample main
.PHONY: all clean
all: $(BIN)
%.o: %.c
$(CC) $(CFLAGS) -o $@ -c $<
sample: sample.o
main: main.o search.o
$(CC) $(CFLAGS) -o $@ $^
clean:
-rm -rf $(BIN) *.o
版权声明:本文博客原创文章。博客,未经同意,不得转载。