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(...) // 设置条件断点注意 : 断点的编号是根据断点的设置顺序来编号的。 (编号在前不一定先运行)