我有一个函数dump()
,当在类型为X
的对象上调用时,打印出一些有用的东西。
我试图写一个GDB漂亮的打印脚本,利用一些命令的输出来返回一个描述值的字符串,沿着这些行:
return gdb.execute(str(self.val) + '.dump()', False, True)
不幸的是,这给了我:
警告:当前输出协议不支持重定向
如何解决这个问题?这是获得错误输出的正确方法吗?
从您的问题中并不完全清楚,但我假设"dump"是您程序中的方法,而不是gdb中Python对象的方法。
在这种情况下,我能想到的唯一方法是将stderr临时重定向到字符串(使用iostreams或libc等效函数),调用该函数,然后恢复stderr。最后,让gdb使用结果字符串。
这是非常迂回的。修改"dump"函数会更简单。
通常最好不要让漂亮的打印机做劣质的函数调用。首先,在某些情况下,这可能会中断或以其他方式表现奇怪(比如:"break dump"然后"bt"——可能发生了不好的事情)。此外,它还可以防止对核心文件使用漂亮打印。