如何在GDB中持续监视变量?

6
许多集成开发环境(IDE)都有一个“变量”窗格,您可以在其中添加/删除要监视的变量。每次您执行代码时,这些变量值都会更新。
GDB 中是否有此选项?

是的,有这样一个选项:您可以输入“display <变量名称>” ,gdb每次停止时都会打印变量的值。请参见文档中的“自动显示”部分。这大致是您想要的吗? - ShreevatsaR
1个回答

6
如果您想要一个图形化版本的GDB,那么可以查看DDD。它有您正在寻找的确切选项。
由于GDB不是图形化的,因此无法在窗格中提供此类功能,但是您可以使用display命令在每个步骤后显示变量。
我认为实现这一点(也是我在实践中所做的)最实用的方法是使用watch。从提示符中:watch varname将在每次写入变量时中断。对于全局变量,有时最好使用print&varname获取变量地址,然后在地址上设置监视器watch (int)0xDEADBEEF,将DEADBEEF替换为打印命令的输出,并使用除int以外的其他内容(如果它不是int)。

还有GDB的TUI模式。我不认为你可以告诉它去监视一个特定的变量,但是你可以让它在你逐步执行时显示寄存器(或源代码、或其他东西)。在提示符中(启动gdb -tui后),输入:tui reg general。这将在每一步显示变量,当它在一个寄存器中时。更多TUI选项


3
总体而言,我同意,不过 GDB 有一种模式,可以在屏幕上分割窗口观看源代码、汇编代码和寄存器(我相信这被称为 TUI)。所以我想,为什么不也包括变量呢? - Strudle
使用watch (int)0x555555906c60命令会出现Cannot watch constant value (int)0x555555906c60'的错误提示。当使用变量名进行监视时,当程序离开变量可用的范围时,监视点会被删除。因此,希望有一种方法可以独立于作用域来监视内存地址。 - ph_0
1
@hello_fr1end 这基本上就是 watch 命令的 -l 参数所做的事情。 - ssbssa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接