有没有一种简单的方法可以查看 GDB 中的全局变量列表?

Is there a simple way to see a list of global variables in GDB?

我有一个应用程序需要使用 GDB/MI 来获取有关进程的信息。现在我在 main 和 运行 进程中设置断点。通过使用 "info locals" 我可以获得当前帧中局部变量的整洁列表。虽然这很好,但我需要能够看到全局变量是什么。

有没有办法做到这一点又不会太痛苦?我可以使用 "info variables" 并获得所有变量的列表,该列表过于广泛并且可能会损害我的应用程序的性能。有没有更简单的方法来获取全局变量列表?

编辑:补充说我想使用 GDB/MI。

根据 GDB docs info variables 将打印出在函数外定义的任何变量。这将包括您的全局变量和静态变量。

如果您知道全局的名称,或者遵循特定的命名模式,您可以为 GDB 提供正则表达式以缩小范围。

所以我找到了我想做的事情的解决方案。

我遵循了这个答案here。但是,我发现当我 运行 答案中给出的命令时,我得到了一些不需要的垃圾(我在 Mac 上 运行 这个)。我通过删除以 .eh 结尾的行来修复此问题,我注意到其他行有以“__”开头的行,因此我删除了以“__”开头的行(即两个下划线之前的 space)。我使用以下方法获得正确的输出:

g++ -O0 -c test.cpp && nm test.o | egrep ' [A-Z] ' | egrep -v ' [UTW] ' | egrep -v '.eh' | egrep -v ' __'