- C++服务器开发精髓
- 张远龙
- 854字
- 2021-07-23 18:22:28
2.9 gdb tui——gdb图形化界面
gdb调试令很多开发者头疼的问题之一,是很多Linux用户或者刚从其他图形化IDE转过来的开发者,都习惯了有强大的源码显示窗口的调试器,可能对gdb用list命令显示源码的方式非常不习惯,这主要是因为gdb在调试时不能很好地展示源码。gdb在调试时可以通过list命令显示源码,但是通过list命令显示的代码不会高亮显示当前正在执行的代码行,这时可以使用gdb自带的gdbtui来解决问题。
如下所示为使用 gdbtui调试 redis-server的截图(图中的 Shell工具为 SecureCRT),这样看代码比使用list命令方便了很多。
![](https://epubservercos.yuewen.com/EE4394/20637464301305906/epubprivate/OEBPS/Images/41263_165_2.jpg?sign=1739693380-rB0Lnm9stAmfgoSiqchkB1PUrqAqDtBk-0-9e2e7e91ab966d6c14c54b6837b067e1)
2.9.1 开启gdb TUI模式
开启gdb TUI模式有以下两种方法。
(1)使用gdbtui或者gdb-tui开启一个调试:
![](https://epubservercos.yuewen.com/EE4394/20637464301305906/epubprivate/OEBPS/Images/41263_166_1.jpg?sign=1739693380-lImDyE3Bxgd4mZ3kecO3ATWU0J7o74lF-0-4b03df8c093ae8b6274695c6741effe8)
(2)在gdb调试过程中程序被gdb中断时,按键盘上的Ctrl+X+A组合键调出gdbtui。
2.9.2 gdb TUI模式下的4个窗口
在默认情况下,在 gdbtui 模式下会显示 command 窗口和 source 窗口,如上图所示。在TUI模式下还有其他窗口,其中4个常用的窗口如下。
(1)command窗口:命令窗口,可以键入调试命令,窗口类型为cmd。
(2)source窗口:源代码窗口,显示当前行、断点等信息,窗口类型为src。
(3)assembly窗口:汇编代码窗口,窗口类型为asm。
(4)register窗口:寄存器窗口,窗口类型为reg。
可以通过在cmd窗口中输入layout+窗口类型的命令选择自己需要的窗口,例如在cmd窗口中输入layout asm可以切换到assembly窗口。
![](https://epubservercos.yuewen.com/EE4394/20637464301305906/epubprivate/OEBPS/Images/41263_166_2.jpg?sign=1739693380-ytIhpSQOg9Fcu3HyEyfT5hJTb4ecFDAG-0-970bab070c4726ed46137804a72fe394)
layout命令还可以用来修改窗口布局,该命令支持的窗口类型参数如下:
![](https://epubservercos.yuewen.com/EE4394/20637464301305906/epubprivate/OEBPS/Images/41263_166_3.jpg?sign=1739693380-GfPZOjwFHt56sXvmP5zLeiJ9c3LCOCNM-0-78bb6ef68357487b48938ee4fbcd2c94)
![](https://epubservercos.yuewen.com/EE4394/20637464301305906/epubprivate/OEBPS/Images/41263_166_4.jpg?sign=1739693380-QmPzJz9ZUtq6LK38sP5HYoO5pvaMPj00-0-dd3c25ac55793a1e8d9337294505aebf)
![](https://epubservercos.yuewen.com/EE4394/20637464301305906/epubprivate/OEBPS/Images/41263_167_1.jpg?sign=1739693380-SUilTnoHG4nUszUUx6Czh8QnONYhwS4Z-0-78c65103b9ea97d010c7a9e5218c999a)
另外,可以通过winheight命令修改各个窗口的大小:
![](https://epubservercos.yuewen.com/EE4394/20637464301305906/epubprivate/OEBPS/Images/41263_167_2.jpg?sign=1739693380-SjxNWdOdNfxqVEioVIZlBH1zZpgtW2Zn-0-a09843c45d797894780819fa9535e4c3)
2.9.3 解决tui窗口不自动更新内容的问题
在当前 gdb tui窗口扩大或者缩小以后,gdbtui窗口中的内容不会自己刷新以适应新的窗口尺寸,我们可以通过space键强行让gdbtui窗口刷新。
2.9.4 窗口焦点切换
在默认设置下,方向键和 PageUp/PageDown 都是用来控制 gdbtui 的 src 窗口的,所以通过上下键显示前一条命令和后一条命令的功能不存在了,不过可以通过 Ctrl+N或Ctrl+P组合键来获取这个功能。
注意:通过方向键调整gdbtui的src窗口后,可以通过update命令重新把焦点定位到当前执行的代码上。
我们可以通过 focus命令调整焦点位置,默认在 src窗口中通过 focus next命令将焦点移到 cmd 窗口,这时就可以像以前一样,通过方向键来切换到上一条命令和下一条命令。同理,可以使用 focus prev切回到 src窗口。如果焦点不在 src窗口,就不能通过方向键来浏览源码了:
![](https://epubservercos.yuewen.com/EE4394/20637464301305906/epubprivate/OEBPS/Images/41263_167_3.jpg?sign=1739693380-p8437fLq3uMs0H52RLDCCJbG9Ky4IcsA-0-5913622fceeab7a3b04fd97d65d76ad2)
![](https://epubservercos.yuewen.com/EE4394/20637464301305906/epubprivate/OEBPS/Images/41263_168_1.jpg?sign=1739693380-3J9idzMygvwSHVcVUjdpNtyydKMlnePi-0-52251240e02390ded5b6ed83bd2836e5)
![](https://epubservercos.yuewen.com/EE4394/20637464301305906/epubprivate/OEBPS/Images/41263_168_2.jpg?sign=1739693380-8lRxTZonxrEel571EefPpIz0jb3UiDuM-0-0707efac57b5d082a9a60316d246f3e4)