2013-02-01 136 views
1

有誰知道如何判斷一個給定的變量是否有效,當它的美麗的打印機從gdb調用。蟒蛇漂亮打印parse_and_eval

例如,我的一個漂亮的打印機使用gdb.parse_and_eval,這會導致gdb崩潰,除非該變量已被初始化。

TestPrettyPrint::TestPrettyPrint(QWidget *parent) 
    : QMainWindow(parent) 
{ 
    ui.setupUi(this); 
    QFile f("C:/Log.txt"); 
} 

如果我在第一行放置一個斷點並嘗試檢查'f'gdb崩潰。如果我在創建'f'之後放置一個斷點,那麼一切都很好。

的任何信息將是非常有益的

感謝

+0

gdb不應該崩潰;如果是這樣,這是一個錯誤。在最壞的情況下,它應該提出一個例外,表明評估中存在錯誤,您應該趕上。 –

回答

1

沒有辦法知道一個變量是否是有效的。

首先,該信息在調試信息中不可用。確切地說,DWARF有一個GCC擴展來提供這些信息,但是它沒有很好的規定,並且沒有真正的工作。在任何情況下,它都不會在GDB中暴露給Python。

其次,即使信息可用,也不能解決問題。任何內存都可能被一個bug所破壞。

答案是漂亮的打印機適應性強。您可以使用現有的「打印」設置來限制發出的垃圾數量。

如果gdb崩潰,那麼這是一個應該報告的gdb錯誤。我知道在bugzilla中有這樣的東西,儘管IIRC它沒有複製指令。這是修復bug最重要的部分。