python pretty print parse_and_eval

时间:2013-02-01 15:06:23

标签: python gdb

有人知道在从gdb调用漂亮的打印机时如何判断给定变量是否有效。

例如,我的一台漂亮的打印机使用gdb.parse_and_eval导致gdb崩溃,除非该变量已初始化。

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

如果我在第一行放置一个断点并尝试检查'f'gdb崩溃。如果我在创建'f'之后设置了一个断点,一切都很好。

任何信息都非常有用

由于

1 个答案:

答案 0 :(得分:1)

无法判断变量是否有效。

首先,调试信息中没有此信息。确切地说,DWARF有一个GCC扩展来提供这些信息,但它没有明确规定并且没有真正起作用;并且无论如何它都不会在GDB中暴露给Python。

其次,即使信息可用,也无法解决问题。任何内存都可以被bug破坏。

答案是让漂亮的打印机具有适应性。您可以使用现有的“打印”设置来限制发出的垃圾量。

如果gdb崩溃,那么这是一个应该报告的gdb错误。我知道bugzilla已经有类似的东西了,虽然IIRC它没有复制指令。这是修复bug的最重要的事情。