2013-05-29 27 views
1

我有一個函數dump(),當它在X類型的對象上調用時,打印出一些對stderr有用的東西。可以使用stdout/stderr打印輸出作爲字符串進行漂亮打印嗎?

我想寫一個GDB漂亮地打印腳本,利用一些命令的輸出返回一個字符串描述值,東西沿着這些線路:

return gdb.execute(str(self.val) + '.dump()', False, True) 

不幸的是,這給了我:

警告:電流輸出協議不支持重定向

我怎樣才能解決這個問題呢?這是否是獲得stderr輸出的正確方法?

回答

2

從你的問題來看,這並不完全清楚,但我認爲「dump」是你的程序中的一種方法,而不是gdb中的Python對象的方法。

在這種情況下,我可以想到的完成您想要的唯一方法是將stderr臨時重定向到字符串(使用iostreams或libc等效項),調用函數,然後恢復stderr。最後,讓gdb使用結果字符串。

這是非常迂迴。改變你的「轉儲」功能會更簡單。

通常最好不要讓漂亮的打印機進行低級函數調用。首先,這可能會在某些情況下破壞或以其他方式奇怪地行爲(例如:「break dump」,然後是「bt」 - 可能是不好的事情)。此外,它可以防止您使用核心文件進行漂亮打印。