GDB调试指北大全

前言

GDB 作为程序调试利器,是一个受通用公共许可证(GPL)保护的自由软件,全称是 GNU Debugger,又常常被称为 GNU symbolic debugger 或者 GNU project debugger,能够帮助开发者调试程序,分析应用程序运行过程。目前支持调试 CC++DGoObjective-CFortranJavaOpenCL CPascalassemblyModula-2Ada 等多种编程语言。

GDB能做什么

GDB 是调试程序的强大武器,能够帮助开发者找出程序出现BUG的原因,但是不要指望它能自己查问题,它仅仅是一个工具,可以帮助我们查找问题原因,常常被用来做以下事情:

  • 分析程序崩溃的原因
  • 查找程序表现出错误行为的原因
  • 找到一些从源码上难以发现的逻辑错误

GDB调试步骤

  1. 使用 g++ 附加 -g 参数编译程序,g++ -g mainpro.cpp -o mainpro
  2. 使用 gdb 程序来启动调试我们自己构建的程序,gdb mainpro
  3. 使用 runbreakprint 等命令调试程序
  4. 使用 quit 命令退出程序

GDB调试示例

  1. 编写示例程序代码,保存到文件 mainpro.cpp
#include <iostream>

int main()
{
    int a = 110, b = 119, c;

    c = a + b;
    std::cout << "c = " << c << std::endl;

    return 0;
}
  1. 使用 g++ 附加 -g 参数编译程序
albert@home-pc:~$ g++ -g mainpro.cpp -o mainpro
albert@home-pc:~$ ls
mainpro  mainpro.cpp
  1. 使用 gdb 命令来启动调试
albert@home-pc:~$ gdb mainpro
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from mainpro...done.
(gdb)
  1. 使用 break 8 在第8行打断点,使用 run 命令启动程序,使用 print c 打印程序变量
(gdb) break 8
Breakpoint 1 at 0x4008b7: file mainpro.cpp, line 8.
(gdb) run
Starting program: /home/albert/mainpro

Breakpoint 1, main () at mainpro.cpp:8
8       std::cout << "c = " << c << std::endl;
(gdb) print c
$1 = 239
(gdb)
  1. 使用 quit 命令退出程序
(gdb) quit
A debugging session is active.

    Inferior 1 [process 227] will be killed.

Quit anyway? (y or n) y
albert@home-pc:~$

GDB启动参数与命令列表(持续更新)

GDB 众多的启动参数和命令提供了强大的调试功能,每一条都可以展开得到很多知识,这些知识的学习是一个持续的过程,短时间无法消化和吸收,所以准备总结一个系列,从最简单的命令开始总结,持续更新学习下去,文章链接不定期更新。

GDB命令备注参考文章
gdbgdb -qGDB启动、查看说明GDB调试指北-启动GDB并查看说明信息
gdb progdb pro 123启动调试程序、调试正在运行的程序[GDB调试指北-使用GDB启动调试]
directory new-path查看调试源码GDB调试指北-查找丢失源码文件
set substitute from-path to-path查看调试源码GDB调试指北-查找丢失源码文件

总结

  • GDB 调试技巧更多的是工具本身的功能,所谓“重剑无锋,大巧不工”,熟练利用这个工具才能发挥最大的威力
  • 知识的学习时一个持续的过程,只有不断的学习和总结才能不断进步,而不要被那些花里胡哨的外表所迷惑
  • 有些知识学着学着就通了,前几天看到 printf 这个函数,很疑惑为什么末尾要加个 f,猜想它是格式化 format 的意思
  • 经过查证果然如此,此时距离第一次在 C 语言中学习 printf 函数已经过去了10年

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

大漠孤烟直,长河落日圆~

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlbertS

常来“玩”啊~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值