GDB调试基础

什么是GDB

GDB是一款程序调试器,它可以告诉你当你的程序运行时,里面发生了什么。
在这里插入图片描述

GDB可以做到的事情:

  • 开始你的程序,并设置程序运行的参数
  • 打断点
  • 检查你的程序在运行时发生了什么
  • 更改程序中的内容,这样您就可以尝试纠正一个错误的影响,并继续了解另一个错误

官方支持的语言类型:

在这里插入图片描述

使用GDB

终端的GDB使用

  1. 可执行文件要编译成gdb可调试程序
    gcc -g main.cpp -o a.out
    -g是GDB的参数,表示用gcc把源文件编译成gdb的调试程序
  2. 运行可执行文件 gdb a.out
  3. 命令
    在这里插入图片描述
  • run r
    运行程序
  • quit q
    退出程序
  • break b
    打断点,可以简写为b。
b <func> 在func函数打断点
b <line_number> 在第n行打断点
info b 查看断点信息
delete <number> 删除断点,断点号用info b查看
disable <number> 禁用断点
enable <number> 启用断点
  • next n
    继续运行代码,可以简写为n
  • list
    输出代码
  • print p
    p <var>查看当前变量的值
  • step s
    s 进入函数,可以进到函数内查看函数内容
  • set
    手动修改变量值 set a=1
  • backtrace - bt查看堆栈

小技巧

  1. 在gdb调试过程中,也可以使用shell命令
  2. 使用set logging on可以把调试的日志输出
  3. watchpoint:查看变量是否改变,当变量改变时,程序会暂停
    watch <addr_var>本质上是检测一个地址
    info watchpoint查看watchpoint断点
    catchponit和watchpoint相关内容

core文件

  • 我们调试程序时,很多情况时因为程序挂掉了。这时候需要我们去debug,重头再运行等报错是一件很蠢的事情,我们可以利用core文件高效解决这个问题。当程序因报错退出时,如果生成了core文件,就可以使用gdb去查看出错的信息。
  • gdb <bin> <core>
  • 如何生成core文件:
ulimit -a 查看ulimit限制
ulimit -c unlimited 执行程序出错时会生成core文件(如段错误)

调试正在运行的程序

gdb -p <pid>
抓进程可以用ps -ef | grep <name>

在cmake中添加gdb调试

cmake中添加gdb遇到的问题
cmake添加gdb调试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值