
seer snap-latest
Seer - gdb 的 GUI 前端
简介
Seer —— Linux 下 gdb 的图形化前端。(Ernie Pasveer [email protected])
本项目正在积极开发中。目标是打造一个简单而美观的 gdb 图形界面。
如有任何 Bug 或期望的功能,请发送邮件至我的邮箱,或在 GitHub 项目页面创建任务。
安装
Seer 可以通过包管理器或从源码安装。
[!NOTE] 安装前请确保满足所有依赖要求。
依赖要求
-
Linux
-
C++17
-
支持 "mi" 解释器的 gdb(可通过运行
gdb --interpreter=mi检查) -
CMake(3.5.0 或更高版本)
-
QT6
- 从源码构建 Seer 时,需要为你的发行版安装 QT6 "devel" 开发包。
- Core
- Gui
- Widgets
- PrintSupport
- Charts
- Svg
- Qt6 构建说明请参见:https://github.com/epasveer/seer/wiki/Building-Seer---Qt6
- 从源码构建 Seer 时,需要为你的发行版安装 QT6 "devel" 开发包。
-
QT5
- Seer 不再支持 Qt5 编译。 2.3 源码树是最后一个支持 Qt5 的版本。
- Qt5 构建说明请参见:https://github.com/epasveer/seer/wiki/Building-Seer---Qt5
通过包管理器安装
可通过以下包管理器获取:
Pamac(Manjaro)
$ pamac install seer
zypper(openSUSE Tumbleweed)
$ zypper install seergdb
Flathub
Flathub 网站。此处
$ flatpak install flathub io.github.epasveer.seer
Flatpak
Seer 测试版。GitHub 上的 Seer 发布页面。
重要提示:GDB Launcher 中运行 gdb 需要 flatpak-spawn --host。参见 https://github.com/epasveer/seer/issues/377#issuecomment-3620844808。
下载 seer.flatpak。然后安装:
$ flatpak install -y --bundle --user seer.flatpak
Snap
Seer 测试版。GitHub 上的 Seer 发布页面。
$ snap install seergdb_<version>.snap --dangerous
从源码安装
(推荐)Seer 可通过以下说明使用 Qt6 构建。
https://github.com/epasveer/seer/wiki/Building-Seer---Qt6
目前仍可使用 Qt5 构建,请按照以下说明操作。
https://github.com/epasveer/seer/wiki/Building-Seer---Qt5
新闻
请查看 GitHub 上的 Seer Wiki 页面。
- v1.17 版本将是最后一个 Qt5 版本。
- 下一个版本将是 v2.0,基于 Qt6。不过目前仍可使用 Qt5 编译。
- 如需最新的稳定版 Qt5 源码,请从以下地址获取 v1.17:https://github.com/epasveer/seer/releases/tag/v1.17
启动 Seer
Seer 旨在让你轻松地从命令行启动要调试的程序。gdb 有多种调试程序的方法,因此 Seer 自然也支持多种方式。
请前往 Wiki 查看运行 Seer 的所有方式。
https://github.com/epasveer/seer/wiki/Starting-Seer
GUI 概览
Seer 各种视图和对话框的示例。
主视图
Seer 的主视图如下所示:

-
源码/函数/类型/变量/库
- 程序中使用的源文件/头文件列表。
- 搜索函数、类型和静态变量。 双击将打开源文件。
- 程序引用的共享库列表。
- 源文件/头文件列表可进行搜索。这将"缩减"显示的文件列表。
- 双击文件将在代码管理器中打开。
-
变量/寄存器信息
- 显示变量和寄存器的值。
- "记录器" - 记录变量的值。可手动输入,或双击代码管理器中打开的文件中的变量。
- "跟踪器" - 创建变量列表,每当 gdb 到达停止点(step、next、finish 等)时显示其值。到达停止点时,列表中的所有变量将显示其可能的新值。
- "寄存器" - 显示所有 CPU 寄存器的值。
-
代码管理器。
- Seer GUI 中间部分的大面积区域。
- 源文件在此视图中打开。
- 可使用 ^F 搜索文件中的文本。
- 双击变量名可将变量添加到"记录器"。 按住 CTRL 键双击将在变量前添加 ""。 按住 SHIFT 键双击将在变量前添加 "&"。 按住 CTRL+SHIFT 键双击将在变量前添加 "&"。
- 选中变量名后右键单击并选择"将变量添加到跟踪器",可将变量添加到"跟踪器"。
- 选中变量名后右键单击并选择"将变量添加到内存可视化器",可将变量添加到"内存可视化器"。
- 在特定行上右键单击可创建断点/打印点。
- 在特定行上右键单击可执行到该行。
- 双击此视图中的标签页可将其分离。
-
断点、监视点、捕获点、打印点、手动 gdb 命令和日志。
- 代码管理器下方的区域。
- 手动命令。手动输入 gdb 或 gdbmi 命令。 命令会被记住,供下次使用 Seer 时使用。
- 断点管理器。创建和管理断点。
- 监视点管理器。创建和管理监视点。 监视点用于监视变量何时被访问(读、写、读/写)。
- 捕获点管理器。创建和管理捕获点。 捕获点在 C++ throw/rethrow/catch 调用时停止执行。
- 打印点管理器。创建和管理打印点。 打印点类似于断点,但允许你在该打印点打印变量。参见 gdb 的 'dprintf' 调用。
- GDB 输出。gdb 程序本身输出的日志。
- Seer 输出。Seer 程序本身输出的日志,作为诊断信息。
- 双击此视图中的标签页可将其分离。
-
栈帧信息。
- 栈帧列表。双击帧可更改作用域(当前函数)。
- 栈帧参数。对于每个帧,打印传递给每个函数的参数。
- 栈局部变量。对于当前函数,打印局部变量的值。
-
线程信息。
- 线程 ID。所有线程的列表。双击线程 ID 可更改作用域(当前线程)。
- 线程帧。对于每个线程,列出其栈帧。
-
支持 Gdb 的反向调试模式。
- 开启或关闭指令记录。
- 将播放方向设置为向前或向后。
打开对话框
调用打开可执行文件对话框时,界面如下所示:

Seer 控制台
可执行文件的所有文本输出将发送到 Seer 控制台。也可通过控制台输入可执行文件的文本输入。

汇编视图
通常 Seer 仅在代码管理器中以标签页形式显示源代码。程序的汇编代码也可以标签页形式显示。
选择"视图->汇编视图",将在源代码标签页旁边显示一个额外的标签页,显示当前正在执行的汇编代码。示例如下。

与源代码标签页一样,可以在汇编标签页中设置断点。当前指令会高亮显示。
双击"断点"标签页和"栈帧"标签页中的条目,将显示这些地址对应的汇编代码。
根据你的配置设置,有"Nexti"和"Stepi"快捷键。通常为"Ctrl+F5"和"CTRL+F6"。 在汇编标签页中使用"^F"将显示一个强大的搜索栏。
Seer 中的汇编功能是新增的。欢迎提出修改建议/功能需求。
内存可视化器
在内存可视化器中查看原始内存内容时,界面如下所示:
| 内存 | 反汇编 |
|---|---|
![]() | ![]() |
数组可视化器
在数组可视化器中查看数组内容时,界面如下所示:
| 普通 | 样条 | 散点 |
|---|---|---|
![]() | ![]() | ![]() |
两个数组可用作 X-Y 绘图。例如,这个简单的 'points' 数组构成了一个形状的 X-Y 轮廓。
int main() {
int points[] = {50,1,20,91,97,35,2,35,79,91,50,1};
return 0;
}
| X 值 | Y 值 | XY 值 |
|---|---|---|
![]() | ![]() | ![]() |
结构体可视化器
在结构体可视化器中查看 C/C++ 结构体或 C++ 类的内容时,界面如下所示。 此示例显示了 Seer 当前所在的 C++ 类的 "*this" 内容。所有基本类型的结构体成员均可编辑。

还有一个基础结构体可视化器,它更轻量,但无法跟踪指针且不可编辑。
图像可视化器
当查看作为图像的原始内存内容时,可使用图像可视化器。

支持/联系
如有任何 Bug 或功能需求,请发送邮件至 [email protected]。或在 GitHub 项目页面创建任务。
星标用户
这是一个美妙的世界。







