侧边栏壁纸
  • 累计撰写 278 篇文章
  • 累计创建 3 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

【Linux】GDB调试

xuanxuan
2022-07-12 / 0 评论 / 0 点赞 / 5 阅读 / 3840 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-02-14,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

GDB调试

GDB是GUN发布的一个强大的程序调试工具,也是Linux程序员不可或缺的一大利器。

安装GDB

注意安装你所需要的版本。

  1. wget http://ftp.gnu.org/gnu/gdb/gdb-8.1.1.tar.gz

  2. tar -zxvf gdb-8.1.1.tar.gz

  3. cd gdb-8.1.1

  4. ./configure

  5. make

  6. make install


启动GDB

使用GDB的前提。

gcc -g hello.c -o hello

启动GDB调试。

gdb hello

GDB和Shell一样支持命令补全。。


获取帮助命令

GDB将命令分为12个大类,使用命令 "help 子类别",可以查看每个类下面的详细帮助。

help breakpoints

设置断点

  • break

break命令用于设置断点,命令行接受行号或者函数名作为参数。

例1:设置以函数test()为断点,执行到调用这个函数的时候程序暂停。

break test()

例2:设置第二行为断点

break 2

查看断点

  • info
info break

删除断点

  • delete

delete + 断点编号

delete 2
  • clear

clear 删除指定位置的所有断点

例:删除函数test附近的所有断点

clear test

运行程序和单步执行

  • run

设置完断点后 执行 run 命令,运行程序。

run

程序中断后,等待用户发出下一步命令的操作。


  • next命令

next命令单步执行程序,缩写为n。也可指定执行行数。

例1

n

例2:

n 3
  • continue

continue命令继续执行,直到遇到下一个断点。缩写为c。

c
  • step

或者继续使用单步执行next,再或是使用step,缩写s。

next与step的最大区别是,step遇到函数是会进入到函数内部的,而next不会(而是当做一条语句)。

next逐过程,step逐语句。

s

监视变量

  • print

调试程序最基本的需求就是监视变量的值,可以使用print命令,缩写为p,显示指定变量的值。

print count
  • watch

为了更方便的监视某一变量,使用watch,来时刻监视某一变量或表达式,只要它发生了变化,就会停下来。并给出提示。

watch  count

image-20220712115212523


临时修改变量

  • set var

某些情况我们需要让程序进入一些特殊的流程,例如进入了一个循环,我们可以修改控制循环变量的值,来跳转到指定的循环次数。

gdb允许用户在程序运行时改变变量的值,通过set var命令来实现。

set var count = 4

查看堆栈情况

  • bt

每次调用一个函数,函数的地址、参数、以及内部变量都会被压入栈中,运行时的堆栈信息对于程序员非常重要,使用"bt"命令可以看到当前运行时栈的情况。

bt

退出GDB

  • quit

调试完毕后,使用quit命令,缩写为q,退出gdb程序。

q
0

评论区