GDB调试概述

本文详细介绍了如何在ArchLinux的原生环境中,使用neovim和gcc/g++进行代码开发,以及如何通过gdb进行debug模式编译、设置断点、执行调试命令和退出gdb的过程。
摘要由CSDN通过智能技术生成

  今天在刷leetcode时候,有一道题我写的代码逻辑出了问题.想着进行一下本地调试的,但是碍于我的开发环境–我是用的原生ArchLinux,然后使用neovim写代码,用原生的gcc/g++编译代码,这时候调试代码就变得麻烦起来了,需要使用命令行的gdb(其实也可以使用vscode,但是我喜欢编译编译分离这样的层状开发体验,而且我使用工具向来都是最简最轻量原则,所以只好复习一下gdb了),这篇博客就诞生了.

声明:这篇博客是为了满足我调试代码的需求,所以会基于我的开发环境


以debug模式编译代码

  gcc/g++默认是以release模式编译的代码,release编译的代码我们是无法调试的,强行使用gdb调用会报错No debugging symbols found in a.out.
  要使用deubg编译代码,我们需要在编译选项中加上-g选项.例如:
g++ main.cc -o a.out -g.

查看gdb信息

  我们使用的调试工具是gdb,这里我们首先要保证我们的gdb就绪了.在命令行中使用gdb --version就可以查看gdb版本信息.

运行gdb和待调试文件

  这里我常用的有两种途径,第一种是直接使用gdb选项,gdb a.out.或者是先运行adb再指定文件,先使用gdb命令,然后在gdb运行框中输入file a.out,也能达到同样的效果.

阅读代码

  在gdb运行框中可以使用l(list) number来在gdb中查看代码信息.

有一个使用说明,这里的number行号并不是从哪一行列出代码,而是会把这一行置于中间.

断点管理和调试命令

  1. 新建断点:b(break) number,这里的number就是行号,意思就是在number行打一个断点,值得一提的是,后面查断点和删除断点本身并不参考这里的number,断点在管理中是由编号管理的而非行号.
  2. 查看断点:info b(break),这个命令可以查看断点编号,断点类型,断点启用状态,地址,所在函数,所在文件,所在行号.
  3. 删除断点:d(delete) number,这里的number就是编号.
  4. 启用/禁用断点:enabledisable number,这里number同样是断点编号.
  5. 逐过程:n(next).
  6. 逐语句:s(step).
  7. 执行到下一个断点处:c(continue).
  8. 执行到当前函数返回:finish.
  9. 执行到指定位置:until number,这里number为行号.
  10. 查看变量值:p val.
  11. 修改变量值:set val.
  12. 跟踪变量:display val.
  13. 栈帧局部变量的值:info local.

退出gdb

  quit或者ctrl+d.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值