main
函数在第 33 行,因此可以输入break 33
在 33 行添加断点:
输入 run
运行程序。正如预期的那样,程序在main
函数处停止。输入layout src
并排查看源代码:
你现在处于 GDB 的文本用户界面(TUI)模式。可以使用键盘向上和向下箭头键滚动查看源代码。
GDB 高亮显示当前执行行。你可以输入 next
(n
)命令逐行执行命令。如果你没有指定新的命令,GBD 会执行上一条命令。要逐行运行代码,只需按回车键。
有时,你会发现文本的输出有点显示不正常:
如果发生这种情况,请按 Ctrl L
重置屏幕。
使用 Ctrl X A
可以随时进入和退出 TUI 模式。你可以在手册中找到其他的键绑定。
要退出 GDB,只需输入 quit
。
设置监察点
这个示例程序的核心是一个在无限循环中运行的状态机。n_state
变量枚举了当前所有状态:
while(true){
switch(n_state){
case State_1:
std::cout
如果你希望当 n_state
的值为State_5
时停止程序。为此,请在main
函数处停止程序并为n_state
设置监察点:
watch n_state == State_5
只有当所需的变量在当前上下文中可用时,使用变量名设置监察点才有效。
当你输入 continue
继续运行程序时,你会得到如下输出:
如果你继续运行程序,当监察点表达式评估为 false
时 GDB 将停止: