display适合持续跟踪变量变化,因其在每次暂停时自动刷新输出;而print需重复输入命令,无法自动更新、易出错且不能对比前后值。

必须用 display,而不是 print;否则变量变化只能手动重复敲命令。
为什么 print 不适合跟踪变量变化
print(简写 p)是一次性输出,每次想看新值都得重新输入。单步调试时频繁敲 p var 容易漏步、打断思路,尤其在循环或深层调用中。
- 它不自动刷新,也不会在每次停顿时显示
- 如果变量名长(比如
ctx->session->user_data->config->timeout_ms),输错一次就得重来 - 无法对比前后值,看不出是“变了”还是“没变”
display 的正确用法和常见陷阱
display 会在每次程序暂停(断点、next、step 等)时自动打印表达式结果,是真正意义上的“变量监视器”。
- 启用监视:
display var_name或display *ptr或display array[i] - 查看当前所有监视项:
info display - 取消某项监视:
undisplay(编号来自info display输出) - 注意:
display对优化后的变量不可靠——若编译没加-g或用了-O2,可能报No symbol "x" in current context
什么时候该用 display,什么时候该换别的
不是所有场景都适合 display:
- 只看一次中间值?用
p更轻量 - 想看内存布局或指针指向的内容?用
x/4xw &var配合display - 变量作用域已退出(比如函数返回后),
display会提示Unable to access memory,这时要删掉它:undisplay - 调试 C++ 成员变量时,
display obj.member可能因内联或优化失败,可改用display *(type*)&obj + offset(但优先建议关优化重编译)
最常被忽略的一点:display 不会告诉你“这个值是不是刚被修改”,它只负责输出。真要确认变更,得结合 next/step 步进节奏,或用 watch 设置写入断点——但 watch 开销大,别在 tight loop 里滥用。


















