gdb常用调试命令-2

gcc -g -o test test.c

gdb 或 gdb ./test

(gdb) file ./test

(gdb) r

Hello, World!

----------

调试代码:

run(r):运行代码

next(n):单步跟踪,函数调用当作一条简单语句执行

step(s):单步跟踪,函数进入被调用函数体内

finish : 退出进入的函数

until(u):退出一个循环体

continue(c):继续运行程序

查看运行时数据

print(p):打印变量、字符串、表达式等值

----------

共有三种设置断点的方法,分别是break(b), watch, catch throw type(如int)

设置断点(break)

b (break) 行号 # 设断点

b 函数名

b 文件名路径:行号 # 以上三种是设置断点的方法

b 行号-or-函数名 if i==9 #设置条件断点

b *(&bret)  # 数据断点的打法,先取数据的地址,再往该地址上打断点,当该地址上的值改变时就会停下

i b :查看断点信息,具体信息如下:

断点编号(Num)、断点类型(Type)、是临时断点还是永久断点(Disp)、目前是启用状态还是禁用状态(Enb)、断点的位置(Address)、断点当前的状态(作用的行号、已经命中的次数等,用 What 列表示)

 

whatis #打印该变量的类型

- 使用watch打断点,为hardware watch point

watch bret  # 当bret值变化时,断点

watch *(&bret) # 地址打法

watch condition # 条件变量打法,如 watch (bret != 1)

i watch # 查看watch设置的断点

 

- 删除

d (delete) 编号 #删除编号处(不是行号)的断点,如 d 1; d 1-10 # 删除第1到10个编号

clear 行号(或变量地址)  # 有两种方法,分别时delete和clear,前者使用编号后者使用行号

- 禁用

disable [breakpoints] [num...]

disable # 禁止所有的断点

disable 1 2 # 表示禁用编号为1和2的断点

- 启用

enable [breakpoints] [num...]  

enable num # 表示启用断点,dismiss禁用

enable once num # 表示可使用一次,之后仍然禁用

enable count num # 使用count次后,之后仍然禁用

enable delete num # 使用一次后,就删除该断点

 

bt:打印栈帧信息

找不到源代码,可使用list

若使用list命令无效,记住gdb的调试信息中并不包含源代码,

这个需要通过directory命令实现,由于某中原因,源代码移动

位置,则需要告诉gdb,gdb就会根据指定的路进查找,查看gdb

的查找路径:

show directories

dir dirname1:dirname2:dirname3

有时使用-g没有调试信息,可改成

-gstabs试一试,若还是不太理想,可使用

-gstabs+

list(l)行号:显示行号

l :从main函数开始

l 函数名

 

[参考](http://c.biancheng.net/view/8219.html)

posted @ 2020-07-25 15:28  绍荣  阅读(265)  评论(0编辑  收藏  举报