Python 美观打印 parse_and_eval

1 投票
1 回答
509 浏览
提问于 2025-04-17 14:26

有没有人知道怎么判断一个变量在 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上已经有类似的记录,不过我记得里面没有重现这个错误的步骤。这些步骤是修复这个错误最重要的部分。

撰写回答