如何在GDB / MI中获得-interpreter-exec的输出?

时间:2016-06-18 14:59:48

标签: c++ c linux gdb

我正在为GDB / MI编写一个包装器,但是,我错过了MI界面中的一些命令。例如,'info variables'命令。我可以使用“-interpreter-exec console”执行它,但获取它的输出很棘手,因为它将所有内容写入控制台记录而不是结果记录。所以我决定在提示符(“(gdb)”行)和“^ done”记录之间取出每个控制台记录,连接它们,然后返回结果。我的问题是 - 这样安全吗?这种方法似乎容易出错,但我没有任何其他想法。想法?

更新 另外,使用像-interpreter-exec console "python\nprint(gdb.execute('info variables', False, True))\n"这样的python可能会很有用,结果会出现在一行中,这很好,但是我怎样才能安全地获得这一行呢?也许我应该在它前面添加一些标记...无论如何,似乎gdb.execute的第三个参数并不常见,所以依赖它可能不是一个好主意。

1 个答案:

答案 0 :(得分:1)

嗯,实际上gdb.execute第三个参数实际上是在2011年的gdb 7.3中支持的,所以我觉得使用它很好。所以我决定使用这个命令

import gdb
import sys


class ConcatCommand(gdb.Command):
    """Executes a command and print concatenated results with a prefix."""

def __init__(self):
    super(ConcatCommand, self).__init__("concat", gdb.COMMAND_USER)

def invoke(self, arg, from_tty):
    pair = arg.partition(' ')
    sys.stdout.write(pair[0] + gdb.execute(pair[2], False, True))
    sys.stdout.flush()

ConcatCommand()

-interpreter-exec console "concat token info variables"一样执行它。然后我只获取以令牌开头的控制台记录的内容。