【Linux篇】gdb调试器的使用
gdb调试器之常用指令
- 前言
- 一 . 程序的两种发布模式
- 二 . gdb调试器的使用
- 1> 调用调试器进入调试环境
- 2 > 退出调试
- 3 > gdb中常用调试指令
前言
- gdb作为Linux下一款好用且强队的调试工具, 支持对 C C++ go Java 等多种高级编程语言进行调试.
- 对于在Linux下进行编程的程序员来说, 会使用gdb来对代码进行调试是不可或缺的素养
一 . 程序的两种发布模式
程序在进行发布时一般有两种版本 :
- debug版本 :
- debug版本的可执行程序会添加调试信息, 因此可以被调试
- 开发软件的程序员进行测试的版本
- 体即较大
- release版本 :
- release版本的可执行程序会删去调试信息, 不可以被调试
- 是面向用户, 用户所使用的版本
- 体即较小
我们对于能够对程序进行调试, 便是因为该程序为debug版本
二 . gdb调试器的使用
对于debug版本的程序, 如何使用gdb进行各种调试呢? 请看下文
1> 调用调试器进入调试环境
gdb filename
// 在shell命令行中输入该指令后, 会进入这样的命令行
(gdb) // 这是一个命令行 , (gdb) 相当于命令行提示符
示例如下:
gdb ../test01_dir/main.c // 调试位于该相对路径下的 main,c文件
2 > 退出调试
(gdb) quit // 在(gdb)这个命令行中, 输入 quit 敲击回车就可以退出调试环境
3 > gdb中常用调试指令
(gdb) l //查看被调试代码
// l n 显示指定行之后的代码
// l 函数名 查看指定函数的代码
(gdb) r // 让程序调试进行
// 相当于 VS中的 F5
(gdb) b // 在指定位置设置断点
// b n 在第n行设置断点
// b sum 在sum函数的入口处设置断点
// b filename:n 在指定文件的指定行设置断点
// b filename:sum 在指定文件的指定函数的入口处设置断点
(gdb) info b // 查看设置的所有断点, gdb会按照断点设置的先后对其进行排序显示
// 按顺序显示断点的类型, 状态(开启或关闭), 地址等
(gdb) d // 删除指定位置的断点
// d n 删除编号为n的断点
(gdb) disable // 将指定断点的状态设置为关闭 (y - yes 代表开启, n - no代表关闭)
// disable n 将编号为n的断点状态设置为 n (关闭)
(gdb) enable //开启指定断点
// enable n,将编号为n的断点状态设置为 y (开启)
(gdb) n // 逐过程进行调试
// 相当于VS中的 F10
(gdb) s // 逐语句进行调试
// 相当于VS中的 F11
(gdb) p // 查看变量
// p i 查看变量i的值
// p &i 查看变量i的地址
(gdb) display // 常显示变量 (常 - 在这里是一直的意思)
// display i 在调试的过程中一直显示变量i的值
// display &i 在调试的过程中一直显示变量i的地址
(gdb) undisplay // 取消变量的常显示
// undisplay n 取消编号为n的变量的常显示
(gdb) c // 按断点运行
// 调试运行至下一个断点,然后停止
// 可以用来按范围查找bug
(gdb) bt // 查看调用堆栈, 常用于调试函数
// bt sum 查看sum函数的调用堆栈
(gdb) finish // 以函数块的方式进行调试
// 从当前所在函数的当前位置开始调试运行, 到当前函数运行结束停止调试
(gdb) untill // untill n 调试运行至第n行停止
// 属于小范围内调试
(gdb) set var i=0 // 将变量的值设置为指定值, 即使程序中该变量不为这个值
// 这是为了查看在特定情况下程序的运行状况
(gdb) if(...) // 设置条件断点
注意 : 断点的编号是根据断点的设置顺序来编号的。 (编号在前不一定先运行)