我有一个函数dump()
,当在X
类型的对象上调用时,会打印出对stderr有用的东西。
我正在尝试编写一个GDB漂亮打印脚本,该脚本利用某些命令的输出来返回描述值的字符串,具体如下:
return gdb.execute(str(self.val) + '.dump()', False, True)
不幸的是,这给了我:
警告:当前输出协议不支持重定向
我该如何解决这个问题?这是获得stderr输出的正确方法吗?
答案 0 :(得分:2)
你的问题并不完全清楚,但我认为“dump”是你程序中的一个方法,而不是gdb中Python对象的方法。
在这种情况下,我能想到实现你想要的唯一方法是暂时将stderr重定向到一个字符串(使用iostreams或libc等价物),调用该函数,然后恢复stderr。最后,让gdb使用生成的字符串。
这是非常迂回的。更改“转储”功能会更简单。
通常最好不要让漂亮的打印机做低级函数调用。首先,在某些情况下(例如:“break dump”然后“bt” - 可能会发生一些不好的事情),这可能会破坏或以其他方式表现得很奇怪。此外,它会阻止您对核心文件使用漂亮打印。