【问题标题】:How do I see the contents of Qt objects during debugging?在调试过程中如何查看 Qt 对象的内容?
【发布时间】:2010-12-08 11:53:40
【问题描述】:

许多 Qt 类使用 pimpl,因此它们对 VS 的调试器非常不透明。

当我想检查一些内部 Qt 状态以查看我的代码是否做错了,或者我对事情的现状有错误的期望时,这很麻烦。

我正在使用 Qt VS 插件 (1.1.0),但这似乎没有帮助。

有什么想法吗?

更新

我的 autoexp.dat 文件充满了 Qt 的东西,但我仍然无法查看较重的类(QWidget、QTcpSocket 等)。

我可以看到更简单的类内容,因此下面的 autoexp.dat 似乎可以正常工作,但尝试查看 QWidget 内部不起作用。

更新 2

出于某种原因,在阅读了 cmets 并查看了更多内容之后,它确实有效,并且我可以看到数据内容。

我不知道同时发生了什么(当我刚刚工作并忽略它时),但我之前确实在查看数据时遇到了问题。

我接受“正常工作”的答案,因为我无法删除悬赏问题,而这是最接近的可用答案。 (autoexp-dat 只是对调试行进行了漂亮的格式化,使用的数据在挖掘时已经可见)

【问题讨论】:

  • 换成Qt Creator而不是VS怎么样? :-)
  • QtCreator 也有同样的问题,但是你应该试一试。
  • 这不是同一个问题,Qt Creator 为您的可执行文件添加了一些gdb 的调试器宏。所以你可以看到很多 Qt 对象的内容。
  • 目前不能选择切换。对不起。

标签: windows visual-studio debugging qt


【解决方案1】:

这可能有助于http://daniel-albuschat.blogspot.com/2008/02/qt-debugging-with-visual-studio-2005.html

IIRC 安装 Qt for Windows 包括一个 autoexp.dat 文件 -
更正,它是qt-vs-addin的一部分

【讨论】:

  • 该链接对在 Vista 上以管理员身份运行很有帮助,但我有点错过了较重的类(QWidget 等)。我的 autoexp.dat 已经有了来自 qt-vs-addin 的东西。可能是我的 QT 符号文件有问题。
【解决方案2】:

您需要为调试器添加自定义转储程序。

GDB 有预建的。您可能必须为其他调试器滚动自己的调试器,尽管对于 Visual Studio,通过调整 autoexp.dat 文件可以很容易地获得一些不错的结果。网上有很多关于如何更改此文件的资源。

【讨论】:

  • 我知道那个文件。我不知道我可以使用它来提供比调试器已有的信息更多的信息。我会调查的。
  • 对 - 你不能调用任何方法,但是许多 Qt 对象隐藏了有趣的数据 - 通常在 d ptr 后面,所以你可以显示这些数据。
  • 但是我不需要手动将所有Qt添加到autoexp.dat吗?目前这工作有点太多了。 ;)
  • 是的,但我建议您根据需要添加所需的内容。我可以只使用 QString、QDateTime 和其他一些......再说一次,我有 90% 的时间使用 GDB,它开箱即用。
【解决方案3】:

编辑 autoexp.dat 是一个选项。请参阅http://eecs.vanderbilt.edu/research/hmtl/wiki/pmwiki.php?n=Knowledge.Qt 了解一组可视化工具。

【讨论】:

    【解决方案4】:

    看来你可能倒霉了。

    目前,此页面包含最完整的 QT 变量宏列表,可添加到 autoexp.dat: QT with Visual Studio 2008 (updated for Qt 4.5.2)

    ActiveQt 听起来也很有希望,但对你来说可能有点矫枉过正。

    除此之外,您还必须编写自己的表达式,或者编写一个 Visual Studio 调试器可视化工具。 (更多信息请参见 CodeProjectMSDN

    由于没有类似的东西,这可能是从头开始发展的好机会。 :)

    【讨论】:

      【解决方案5】:

      当使用调试信息编译 Qt 时,肯定可以查看 pimpl。不确定 VS,但使用 gdb 它只是 Works™。

      【讨论】:

      • 这里也是如此。我想知道问题是什么?当我之前尝试调试时,可能是堆栈错误或某些损坏。谢谢你让我再看一遍。 :)
      猜你喜欢
      • 2012-08-25
      • 2012-07-09
      • 1970-01-01
      • 2015-02-12
      • 2011-03-28
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多