2013-02-01 56 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最重要的部分。