GDB学习

GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具;

GDB使用

1.启动gdb

gcc -g hello.c hello -o  hello    //编译hello.c    -g表示调试  -o 输出编译文件hello
gdb hello   //启动gdb  
gdb -q hello //启动gdb  -q 不打印gdb版本信息

gdb hello 带版本信息

gdb -q hello

2.查看源码

list (简写l):查看源程序代码,默认显示10行。回车键,显示接下来10行

list 用法:list + 行号 将会显示行号为中心的10行内容

                list + 函数名 会显示为该函数名的函数内容

 3.运行程序

run (简写r)运行程序直到遇到 结束或者遇到断点等待下一个命令;

until:运行程序直到退出循环体;
until+行号: 运行至某行,不仅仅用来跳出循环

4.设置断点

break(简写 b) :格式 b + 行号,在某行设置断点;

info breakpoints :显示断点信息

 断点信息包括如下:

Num: 断点编号

Disp:断点执行一次之后是否有效 kep:有效 dis:无效

Enb: 当前断点是否有效 y:有效 n:无效

Address:内存地址

What:位置

断点其他操作

delete    +   断点号n:删除第n个断点
disable  +   断点号n:暂停第n个断点
enable   +  断点号n:开启第n个断点
clear      +  行号n:清除第n行的断点

5、单步执行

使用 continue(简称c)  step(简称s)  next(简称n)

continue (简写c ):继续执行,到下一个断点处(或运行结束)
next:(简写 n),单步跟踪程序,当遇到函数调用时,也不进入此函数体;此命令同 step 的主要区别是,step 遇到用户自定义的函数,将步进到函数中去运行,而 next 则直接调用函数,不会进入到函数体内。
step (简写s):单步调试如果有函数调用,则进入函数;与命令n不同,n是不进入调用的函数的

 6、查看变量

print + 变量名 打印变量

print ++a:将把 a 中的值加1,并显示出来
print value:将显示字符串 value的值
print test(12):将以整数12作为参数调用 test() 函数
print test(a):将以变量 a 作为参数调用 test() 函数

其他:

display a 该命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置参数a值

whatis + 变量名 打印变量类型

 7、退出函数或退出调试

return (简写ret)退出前执行函数 

quit (简写 q) 退出调试

 

其他:

where/bt :当前运行的堆栈列表;
bt backtrace 显示当前调用堆栈
up/down 改变堆栈显示的深度
set args 参数:指定运行时的参数
show args:查看设置好的参数
info program: 来查看程序的是否在运行,进程号,被暂停的原因

窗口设置:

layout:用于分割窗口,可以一边查看代码,一边测试:
layout src:显示源代码窗口
layout asm:显示反汇编窗口
layout regs:显示源代码/反汇编和CPU寄存器窗口
layout split:显示源代码和反汇编窗口
Ctrl + L:刷新窗口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值