1

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

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

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

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

任何信息都会非常有帮助

谢谢

4

1 回答 1

1

没有办法判断变量是否有效。

首先,此信息在调试信息中不可用。准确地说,有一个 DWARF 的 GCC 扩展来提供这些信息,但是它没有很好地指定并且并没有真正起作用;在任何情况下,它都不会暴露给 GDB 中的 Python。

第二,即使有信息,也不能解决问题。任何内存都可能被错误破坏。

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

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

于 2013-05-24T17:07:08.600 回答