【问题标题】:Not seeing the output from qInfo()看不到 qInfo() 的输出
【发布时间】:2016-10-12 22:25:25
【问题描述】:

QT 新手,我导入了一个别人制作的项目,它可以在 QT Creator 的 MinGW 版本上编译和运行。但是它有一个小问题,如果我能看到调试输出,那将更容易诊断。

到处都有像“qInfo()

调试开始 调试完毕

我尝试过的:

  • 确保使用的工具包是安装时附带的 QT 调试器和 mingw

  • 在 main.cpp 的顶部放置一个 ifdef,并带有“#undef QT_NO_INFO_OUTPUT”

  • 在所有头文件中添加了包含 QtDebug

还是什么都没有。

我做错了什么?

请记住,我是 Qt 的新手,也许我所说的其中一件事我已经尝试过我没有正确实施:S

谢谢!

【问题讨论】:

  • 暂时忘记调试信息,看看你能不能get the debugger set up。使用调试器,您可以逐行遍历代码(甚至可能向后退一步)并准确查看发生了什么。比使用调试语句玩游戏更有效率。
  • 我实际上有这个工作,似乎一个指针在某个地方被设置为零,当它稍后实际需要时。我只是不知道在哪里,我怀疑当它发生时,其中一条调试消息可能会说明原因
  • 可能,但您还应该能够设置一个断点,当指针更改时将停止程序。 Link to command line GDB watchpoint setup,但 QT 创建者可能会有一个 GUI,使设置更容易。
  • 你的意思是添加数据断点吗?不知道你能做到这一点,玩过它,它似乎在请求授权访问谷歌驱动器的功能的最后启动。也许只是超出范围?我认为这只是未能获得身份验证,但我正在努力寻找原因。后退一步会很方便,但我看不到这样做的选项?
  • 数据断点听起来不错。倒退是很少见的。有些 gdb 实现有它,有些没有。 Ant 是函数的最后部分,但是......您的指针是否在函数内部作用域并且丢失了?您是否可能超出堆栈并使返回变得混乱?需要代码告诉。

标签: c++ qt qt-creator qdebug


【解决方案1】:

qInfo() qDebug() 等都回退到一个可以被覆盖的函数。确保这不是在项目内的任何地方完成的(全局搜索“qInstallMessageHandler”)。如果未实现,请自行定义:

void debugmessagehandler(QtMsgType Type, 
    const QMessageLogContext& Context, 
    const QString &Message) 
{
#ifdef WIN32
    OutputDebugString(reinterpret_cast<const wchar_t *>(m.utf16()));
#endif
}

并像这样在您的 QApplication-object-constructor(或不久之后)中注册它

this->qInstallMessageHandler(debugmessagehandler);

现在您需要做的就是确保您的调试器已实际连接。你可以打电话

isDebuggerPresent(void);

从你的代码里面的winbase.h来检查,或者使用外部程序来验证。

【讨论】:

  • 很高兴我找到了这篇文章,因为我刚刚在一家公司开始了一个新职位,并开始从事一个相当大的 Qt 项目;但是以前的开发人员离开了公司。尝试进行一些简单的调试并且无法让 qDebug 工作,这让我发疯了。这是我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多