gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用
程序员文章站
2022-06-01 10:14:51
...
目录
GDB TUI使用
开启 GDB TUI 模式
- 开启 GDB TUI 模式有两个方法:
- 方法一:使用 gdbtui 命令或者 gdb-tui 命令开启一个调试
- gdbtui -q 需要调试的程序名
- 方法二:直接使用 GDB 调试代码,在需要的时候使用切换键 Ctrl + X + A 调出 GDB TUI (再按一次退出TUI)
- 默认情况下,GDB TUI 模式会显示 command 窗口和 source 窗口,如上图所示
- 还有其他窗口,如表中四个常用的窗口:
(cmd)command 命令窗口,可以输入调试命令 (src)source 源代码窗口, 显示当前行、断点等信息 (asm)assembly 汇编代码窗口 (reg)register 寄存器窗口
- 通过“layout + 窗口类型”命令来选择自己需要的窗口
- 例如,在 cmd 窗口输入 layout asm 则可以切换到汇编代码窗口。
- layout 命令可以用来修改窗口布局,在 cmd 窗口中输入 help layout,常见的有:
通过 winheight 命令修改各个窗口的大小
#将代码窗口的高度扩大 5 行代码 winheight src + 5 #将代码窗口的高度减小 4 代码 winheight src - 4
- 当前 GDB TUI 窗口放大或者缩小以后,窗口中的内容不会自己刷新以适应新的窗口尺寸,可以通过 space 键强行刷新 GDB TUI 窗口。
窗口焦点切换
- 在默认设置下,方向键和 PageUp/PageDown 都是用来控制 GDB TUI 的 src 窗口的
- 显示前一条命令和后一条命令的功能:Ctrl + N/Ctrl + P
- 注意:通过方向键调整了GDB TUI 的 src 窗口以后,可以用 update 命令重新把焦点定位到当前执行的代码上。
- focus 命令调整焦点位置
- 默认情况下焦点是在 src 窗口,通过 focus next 命令可以把焦点移到 cmd 窗口,这时候就可以像以前一样,通过方向键来切换上一条命令和下一条命令。
- 使用 focus prev 切回到源码窗口,如果焦点不在 src 窗口,我们就不必使用方向键来浏览源码了。
GDB 高级扩展工具:CGDB
- CGDB 本质上是对 GDB 做了一层“包裹”,所有在 GDB 中可以使用的命令,在 CGDB 中也可以使用。
CGDB 安装
wget https://cgdb.me/files/cgdb-0.7.1.tar.gz
- cgdb依赖libreadline和ncurses开发库。
./configure --prefix=/usr/local make sudo make install
- 无法下载,改用github上的资源
git clone https://github.com/cgdb/cgdb.git
安装依赖文件
yum install ncurses-devel yum install texinfo yum install help2man yum install readline-devel yum install flex
- 如果上述安装提示找不到资源,参考文章:https://blog.csdn.net/baidu_41388533/article/details/109474277
- texinfo及help2man未找到yum源,通过源码安装,参考:https://blog.csdn.net/baidu_41388533/article/details/109475376
在cgdb文件下生成configure文件并安装
./autogen.sh
./configure --prefix=/usr/local make make install
使用CGDB
- 安装成功以后,就可以使用 CGDB 了,在命令行输入 cgdb 命令启动 CGDB ,启动后界面如下:
- 界面分为上下两部分:
- 上部为代码窗口,显示调试过程中的代码
- 下部就是 GDB 原来的命令窗口
- 默认窗口焦点在下部的命令窗口,如果想将焦点切换到上部的代码窗口,按键盘上的 Esc 键,之后再次按字母 i 键将使焦点回到命令窗口。
- 用客户端程序 redis-cli 为例,输入以下命令启动调试:cgdb redis-cli
- 加两个断点,如下图所示
- 添加断点以后,代码窗口的行号将会以红色显示
- 有一个绿色箭头指向当前执行的行( 这里由于在 main 函数上加了个断点,绿色箭头指向第一个断点位置 )。
- 绿色箭头始终指向当前执行的行数: