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

目录

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 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

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

./autogen.sh

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

使用CGDB

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值