Python 美观打印 parse_and_eval
有没有人知道怎么判断一个变量在 gdb 调试器中被调用时是否有效?
举个例子,我有一个漂亮的打印工具,它使用了 gdb.parse_and_eval,如果变量没有初始化,gdb 就会崩溃。
TestPrettyPrint::TestPrettyPrint(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
QFile f("C:/Log.txt");
}
如果我在第一行设置一个断点,然后尝试查看 'f',gdb 就会崩溃。如果我在 'f' 创建之后再设置断点,那一切都正常。
任何信息都会非常有帮助。
谢谢!
1 个回答
1
没有办法判断一个变量是否有效。
首先,这些信息在调试信息中是找不到的。具体来说,GCC有一个扩展叫DWARF,理论上可以提供这些信息,但它并没有被很好地定义,也不太好用;而且无论如何,这些信息在GDB中对Python是不可用的。
其次,即使这些信息可以获取,也解决不了问题。因为任何内存都可能因为程序错误而被破坏。
解决办法是让漂亮打印工具(pretty-printers)变得灵活。你可以使用现有的“打印”设置来限制输出的垃圾信息。
如果gdb崩溃了,那就是gdb的一个错误,需要报告。我知道在bugzilla上已经有类似的记录,不过我记得里面没有重现这个错误的步骤。这些步骤是修复这个错误最重要的部分。