GDB调试工具入门

0 gdb介绍

调试器GDB允许查看在执行一个程序时其内部时发生了什么,或者是程序奔溃(crashed)时它正在做什么。

  • gdb通过以下四种事情来捕获某个行为的异常错误(bug):
    运行程序,指定可能影响其动作的内容。
  • 让程序在指定的情况下停止。
  • 检查当程序停止时发生了什么。
  • 改变程序中的内容,以便于更正一个错误,然后继续寻找下一个错误。

gdb可用于调试C,C++,Fortran,Modula-2。
gdb通过在终端执行gdb命令激活。一旦启动,他从命令行读取命令,直到使用quit命令让它退出。也可以通过使用help command命令获取在线帮助。
gdb可以使用无参或者带参无选项执行,不过一般都使用带参的命令,例如:指定一个程序或者指定core文件:

gdb program         #指定一个可执行程序
gdb program core    #指定一个可执行程序以及core文件
gdb program pid     #指定一个正在运行的程序
gdb -p pid          #同上

1 gdb常用命令

1.1 list

list命令用于查看代码,可简写为l。

list        #查看上一次list中心附近的10行代码,-5~+5
list n      #查看第n行附近10行代码,n-5~n+5
list b,e    #查看b,e行范围的代码
list function   #查看函数function附近的代码
list file:line  #查看文件file第line行附件的代码
list file:function  #查看文件file的函数function附近的代码
list *address       #地址为address的行附近的代码,使用info add name获取地址

1.2 break

break命令用于设置断点,可用b简化;delete用于删除断点,可用d简化。

break n                 #在第n行设置断点
break function          #在函数function设置断点,可以是库函数
break file:line         #在文件file第line行设置断点
break file:function     #在文件file的function函数设置断点
break n if condition    #根据条件在第n行设置断点,例如b 16 if i==10
break *address          #在地址为address的行设置断点

1.3 delete和clear

每次使用break设置断点都会分配一个断点号,例如:

(gdb) b 16
Breakpoint 1 at 0x400512: file test.cc, line 16.
(gdb) b 17
Breakpoint 2 at 0x40051b: file test.cc, line 17.

要删除断点使用可以使用delete命令:

delete [breakpoints num] [range...]
delete n    #删除n号断点
delete m-n  #删除m-n号断点

也可以使用clear命令,clear是基于行的,不是删除所有断点:

clear n             #删除n行的所有断点
clear function      #删除函数function的断点
clear file:line     #删除文件file第n行的所有断点
clear file:function #删除文件:函数的所有断点

1.4 查看变量

  1. print命令
    print命令用来在调试程序时查看变量值,可简化为p。
print var           #打印var的值
print *array@len    #以{a, b, ...}格式打印动态数组
print array         #以{a, b, ...}格式打印静态数组
print file::var or print function::var  
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值