2

我正在使用 gdb 调试 Fortran 程序,当在断点处尝试打印二维数组的元素时,p/d cs(ii,inti+1)我收到消息No symbol cs in current context。但是,cs在当前范围内显然是可用的——我刚刚跨过的那一行使用了它——虽然没有声明它,但在模块级别(在同一个模块中)。

我试图找出可用的变量看看我是否能弄清楚为什么gdb不让我查看这个变量的内容。info locals对我没有多大好处,因为我不是在追求局部变量,并且info variables需要永远完成,因为我有几个具有 10 000 行的矩阵,它不仅打印名称,还打印每个的内容多变的。

有没有办法只打印当前范围内所有可用变量的名称(可能还有维度)?虽然我在问 - 我在这里错过了什么明显的东西来解释为什么我无法查看的内容cs(ii,inti+1)

4

1 回答 1

1

对于最初的“ No symbol cs in current context ”问题,我会在反汇编中快速查看函数是否被内联。

只需打印全局变量的名称和类型就可以使用 Python 脚本来实现。

将此保存到 list-globals.py

import gdb
block = gdb.block_for_pc(long(gdb.parse_and_eval('$pc'))).global_block
for symbol in block:
    gdb.write('%s: %s\n' % (symbol.print_name, symbol.type))

然后运行:

$ gdb /bin/true
(gdb) start
(gdb) source list-globals.py

您的 gdb 需要在启用 Python 脚本的情况下进行编译。

于 2013-04-28T21:47:54.033 回答