GDB调试之图形化界面(TUI)

本文介绍了GDB的文本用户界面(TUI)模式,包括窗口介绍、切换、属性设置和刷新,以及TUI模式下的特定指令。在TUI模式下,用户可以方便地查看源代码、汇编、寄存器和命令窗口,并通过快捷键进行窗口切换。此外,文章还阐述了如何在TUI中显示和管理断点状态,帮助开发者更高效地进行程序调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

  • 简介
  • 窗口介绍及切换
  • 窗口属性
  • 窗口刷新
  • TUI模式下指令介绍
  • 断点状态显示

简介

TUI(TextUser Interface)为GDB调试的文本用户界面,可以方便地显示源代码、汇编和寄存器文本窗口,甚至可以显示程序及断点运行状态。

备注:本文所有命令均在tui模式下生效

窗口介绍及切换

  1. 窗口介绍

    该模式下有五种窗口

    • (cmd)command 命令窗口. 可以键入调试命令

    • (src)source 源代码窗口. 显示当前行,断点等信息

    • (asm)assembly 汇编代码窗口

    • (reg)register 寄存器窗口

    • split 源码和汇编混合窗口

      上述图片即为split窗口

  2. 窗口切换

    • 使用layout命令打开src/asm/reg/split窗口
    • 使用focus命令切换激活的窗口,可简写为fs
    • 使用TUI快捷键
      • 前置快捷键:ctrl + x 即下列快捷键均需要一起按下ctrl+x后松开,再和下列按键组合
      • 组合键
        1
        2
        3
        4
        5
        
        a     //关闭/打开TUI界面,注意:虽然在进入gdb调试后也能通过该命令打开TUI界面,但是会出现一些异常,建议还是进入GDB的时候加入-tui参数
        1     //使TUI只显示一个窗口
        2     //使TUI显示两个窗口,连续使用该快捷键可在三种窗口之间切换(但同时只能显示两个窗口)
        o     //切换激活窗口,效果类似focus
        s     //在TUI模式和TUISingleKey模式之间切换,这个TUISingleKey模式感觉不大好用😞
        

窗口属性

窗口大小使用winheight调节,单位:行数
例如

1
2
winheight src +5
winheight src -4

窗口刷新

ctrl+l可以刷新窗口,可以避免调试时屏幕混乱

当窗口大小变化而gdb tui窗口未随之变化时,这时候随便输入一下就会刷新过来了,亲测使用ctrl+l刷新后有时会导致显示消失

TUI模式下指令介绍

当进入该模式,方向键和page up/down都编程了翻阅源码的按键,如何浏览或使用上一条gdb指令呢

  • ctrl+p previous 上一条
  • ctrl+n next 下一条
  • ctrl+b back 命令行光标前移
  • ctrl+f forward 命令行光标后移

或者,切换GDB focus的窗口,使其激活cmd窗口,而不是src窗口,这样就和普通模式的GDB操作相同啦

断点状态显示

在tui模式下,能够显示程序执行的状态和断点状态

  • B表示该断点已执行
  • b表示该断点未执行
  • +表示断点使能
  • -表示断点失能

https://kind-ptolemy-135b80.netlify.app/gdb%E8%B0%83%E8%AF%95/gdb%E8%B0%83%E8%AF%95%E4%B9%8B%E5%9B%BE%E5%BD%A2%E5%8C%96%E7%95%8C%E9%9D%A2%EF%BC%88tui%EF%BC%89/

### 使用 DBeaver 导出表结构和数据 #### 方法一:一次性导出表结构与数据 为了实现类似于 Navicat 的功能,在 DBeaver 中可以执行一次性的操作来完成表结构加数据的 SQL 文件导出。此方法允许创建包含 `DROP` 和 `INSERT` 语句在内的完整脚本,从而确保所生成的 SQL 脚本能被多次利用而不会引发冲突[^1]。 ```sql -- 示例SQL输出可能如下所示: DROP TABLE IF EXISTS example_table; CREATE TABLE example_table ( id INT PRIMARY KEY, name VARCHAR(255), age INT ); INSERT INTO example_table (id, name, age) VALUES (1,'Alice',30),(2,'Bob',25); ``` #### 方法二:分步导出数据库对象 对于更精细控制的需求,可以选择分别处理表结构和数据: - **导出整个数据库表结构** 当目标是获取整个数据库内所有表格定义时,可通过导航至所需数据库节点并选择“工具”下的“Dump Database”。这一步骤会生成一个包含了所有必要建表命令的 `.sql` 文件[^2]。 - **单独导出特定表的数据** 如果仅需关注某些具体表格的内容,则可以在对应的表上点击鼠标右键,随后选取“Export Data...”。在此过程中还可以指定是否要将不同表格的结果汇总到同一个文件里,或是分开保存为独立文档。 #### 关于表的概念补充说明 值得注意的是,“表”作为关系型数据库的核心组成部分之一,其设计遵循固定的列布局(即字段),每一行代表一条完整的记录条目。这种二维数组式的组织形式使得我们可以方便地管理和查询大量关联信息[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值