您的位置:首页 > 博客中心 > 数据库 >

gdb学习[第二版]

时间:2022-03-14 00:53

概述

gdb是GNU debugger的缩写,是编程调试工具。

 

功能

1、启动程序,可以按照用户自定义的要求随心所欲的运行程序。

2、可让被调试的程序在用户所指定的断点处停住 (断点可以是条件表达式)。

3、当程序停住时,可以检查此时程序中所发生的事。

4、动态改变程序的执行环境。

gxlsystem.com,布布扣 

 

示例:

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 ...

gxlsystem.com,布布扣 

 

查看源码

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 [-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常用命令总结

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

 

热门排行

今日推荐

热门手游