gdb基本使用方法和常用命令

一:符号表

  1. 说明
    使用gdb调试的前提是要有符号表。如果程序是release版本,符号表不全,则使用gdb调试时,不能单步调试,成员变量等信息不可查
  2. 如何生成符号表
    编译代码时加上-g参数,则编译的程序中会带有当前程序的符号表。
    如 gcc -o main main.c,则可对main程序进行单步调试

二:调试
假设有一进程test

  1. gdb test //调试某一可执行程序
  2. run(简写为r) //运行进程,假设有入参,则运行run agrc
    三:断点相关
    1.设置断点
    设置断点的命令为b
    1)b function 将函数function设置为断点
    2)b test.c:100 将文件的第100行设置为断点
    3)b test.c:100 if tt = 1 将文件test.c的第100行作为断点,当tt等于1时停止
    2,查看当前断点信息 info b
    3,删除当前断点信息 delete 1 delete加断点的Num 或者用d 1
    4,使当前断点失效 disable 1 如果断点已失效 用enable 1时断点1继续生效
    5,清除所有断点 clear
    四:打印变量的值
    1,print i 简写为p打印变量i的值
    2,p/x i 以十六进制打印变量i的值 八进制(o),二进制(t)
    五:调试基本命令
    1,bt 查看当前栈空间信息
    2,next 简写为n 进行单步调试
    3,step 简写为s 遇到函数时进入函数
    4,finish 结束当前函数
    5,continue 简写为c,遇到断点继续执行用c ;c 3,忽略断点,直到第三次碰到断点
    6,untill 简写为u,循环体直接退出
    7,set i = 1 当前断点处设置变量i的值为1
    8,info locals 显示当前所有局部变量
    六:稍微高级点的用法
    1,command
    在断点处做处理,如下图,当i=5时,attach.c的第16行停住,执行的命令时打印i的值
    command后面加数字代表的是对某个断点做command
    在这里插入图片描述
    2, frame 2 跳到2号栈框
    在这里插入图片描述
    3,@ 数组打印用@,假设需要打印10个字符,变量为tt,则p@10
    4,call 执行某个函数时用
    call
    6,set follow-fork-mode child/parent 当fork子进程需要跟子进程时用,或跟进父进程使用
    7,gdb attach xx 跟进正在运行pid为xxx的程序
    8,jump gdb可以改变程序的运行顺序
    jump test.c:10 直接跳转到test.c的第10行运行,跳过中间代码
    jump +10 直接跳转到当前断点后的第10行,跳过中间代码
    9,return 强制返回,剩余代码不再还行
    10, up 上移栈针,使上一个函数成为当前函数
    七:多线程调试
    info thread 查看所有线程信息
    thread x 将程序跳到线程x的栈框
    break thread_test.c:123 thread all 在所有线程中相应的行上设置断点
    set scheduler-locking off|on 锁定当前线程,只调试当前线程

八:其他
list function 显示某个函数的源码
list 显示当前行后面的源程序
list - 显示当前行前面的源程序
show listsize 查看当前listsize的设置。
set listsize count 设置一次显示源代码的行数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值