欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用

程序员文章站 2022-06-01 10:14:51
...

目录

GDB TUI使用

开启 GDB TUI 模式

窗口焦点切换

GDB 高级扩展工具:CGDB

CGDB 安装

使用CGDB

GDB TUI使用

开启 GDB TUI 模式

  • 开启 GDB TUI 模式有两个方法:
    • 方法一:使用 gdbtui 命令或者 gdb-tui 命令开启一个调试
      • gdbtui -q 需要调试的程序名
    • 方法二:直接使用 GDB 调试代码,在需要的时候使用切换键 Ctrl + X + A 调出 GDB TUI (再按一次退出TUI)

gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用

  • 默认情况下,GDB TUI 模式会显示 command 窗口和 source 窗口,如上图所示
  • 还有其他窗口,如表中四个常用的窗口:
(cmd)command 命令窗口,可以输入调试命令
(src)source 源代码窗口, 显示当前行、断点等信息
(asm)assembly 汇编代码窗口
(reg)register 寄存器窗口
  • 通过“layout + 窗口类型”命令来选择自己需要的窗口
    • 例如,在 cmd 窗口输入 layout asm 则可以切换到汇编代码窗口。

gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用

  • layout 命令可以用来修改窗口布局,在 cmd 窗口中输入 help layout,常见的有:

gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用

通过 winheight 命令修改各个窗口的大小

gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用

#将代码窗口的高度扩大 5 行代码
winheight src + 5
#将代码窗口的高度减小 4 代码
winheight src - 4

gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用

  • 当前 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调试学习与实践笔记 -- GDB TUI及CGDB的使用

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上的资源

gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用

gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用

git clone https://github.com/cgdb/cgdb.git

gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用

安装依赖文件

yum install ncurses-devel

yum install texinfo

yum install help2man

yum install readline-devel

yum install flex

在cgdb文件下生成configure文件并安装

./autogen.sh

gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用

./configure --prefix=/usr/local
make
make install

使用CGDB

  • 安装成功以后,就可以使用 CGDB 了,在命令行输入 cgdb 命令启动 CGDB ,启动后界面如下:

gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用

  • 界面分为上下两部分:
    • 上部为代码窗口,显示调试过程中的代码
    • 下部就是 GDB 原来的命令窗口
  • 默认窗口焦点在下部的命令窗口,如果想将焦点切换到上部的代码窗口,按键盘上的 Esc 键,之后再次按字母 i 键将使焦点回到命令窗口
  • 用客户端程序 redis-cli 为例,输入以下命令启动调试:cgdb redis-cli

gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用

  • 加两个断点,如下图所示

gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用

  • 添加断点以后,代码窗口的行号将会以红色显示
  • 有一个绿色箭头指向当前执行的行( 这里由于在 main 函数上加了个断点,绿色箭头指向第一个断点位置 )。
  • 绿色箭头始终指向当前执行的行数:

gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用

相关标签: C++服务器