问题标签 [qdebug]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 将 FILE * 流重定向到 Qt 中的自定义处理程序
我想将 C 库集成到我的 C++/Qt 项目中。该库接受 FILE* 流以打印调试消息(而不是为日志记录回调函数提供挂钩......)。
如果我只是通过stderr
,它可以正常工作,但我想将它集成到我自己的日志基础设施中,它使用qDebug()
和合作。
我最初的想法是使用socketpair()
,获取发送方 fd 的 FILE* 流,将其传递给库,并使用 QSocketNotifier 处理接收方,但我遇到了 2 个问题:
- 它不是多平台的,尽管有适用于 Windows 的实现。
- 我的应用程序是单线程的(我想保持这种方式),这意味着套接字对的 2 个套接字是从同一个线程写入和读取的。一段时间后,这似乎以僵局告终。
还有哪些其他方法可以提供 FILE* 流,将其读取集成到 Qt 的事件循环中,不需要多线程,并且是多平台的?
android - 在 adb logcat 输出中查看 Android 上 Qt 应用程序的日志记录的最简单方法是什么?
注意我不是QtCreator 用户。我使用 qmake、make 和 androiddeployqt 在构建脚本中构建 android 应用程序,并使用 adb install 将它们部署到设备上。
我希望能够在 abd logcat 输出中看到 qDebug、qInfo 等的输出,以及来自 QML 引擎的任何 qml conole.log 输出和任何其他喋喋不休。但在 Android 的 Qt 应用程序的香草版本中,任何此类消息似乎都是黑洞(或者至少我不知道它们要去哪里)。
我通过以下组合取得了一些成功:
使用qInstallMessageHandler将日志重定向到 stderr (如此处所示)。
使用此处的代码将 stderr 重定向到 Android 日志记录。(更新:后来发现这种方法相当不令人满意,因为它依赖于另一个线程在管道上侦听,并且崩溃的应用程序可能会在崩溃之前立即丢失日志记录)。
但这一切似乎有点笨拙和过于复杂。肯定有更好更简单的方法吗?(例如,使用 Windows 上的 Qt,您可以简单地构建CONFIG += console
以获取显示日志记录的控制台窗口,但该选项是特定于 Windows 的)。
感兴趣的 Qt 版本从 5.7 开始。
谷歌搜索这个输出重定向问题出现了很多提及adb shell setprop log.redirect-stdio true
,但据我所知,它对 Qt 应用程序的 stout/stderr 没有影响。
qt - QtMessageHandler / QTextStream 导致内存使用量上升?
我在我的应用程序中安装了一个简单的 QtMessageHandler:
现在,当我使用 qDebug 将一些日志写入日志文件时(应用程序什么也不做!),内存使用量正在上升。当我停止写日志时,它会回落,但永远不会回到以前的值。每几千条消息,内存就会增加几百千字节并保持不变。
我认为是 QTextStream 导致了这种情况,因为如果我将那部分注释掉,那么内存使用率就会很低。
我尝试将 myMessageHandler 函数移动到一个单独的类并将 QTextStream 作为成员变量,而不是在每次调用 myMessageHandler() 时创建它,但是我无法让 qInstallMessageHandler() 工作。
这给了我:
任何人都知道如何解决这个问题?
c++ - qDebug - 如何以位输出数据(二进制格式)
qDebug() 可以输出二进制格式的数据吗?
例如,我想检查一些状态变化:
我想以二进制格式生成输出,例如:
c++ - 防止 qDebug() 写入标准输出
我正在使用qDebug()
,qInfo()
等等结合qInstallMessageHandler
来编写我的logfiles
. 执行我的应用程序时,我还在批处理屏幕上获得输出。
我只找到了QT_NO_DEBUG_OUTPUT
,但我想在运行时切换此配置。有没有办法阻止 Qt 写入标准输出?
qt - QDebug 在 Qt 4.7 中传递自定义调试消息类型
我们正在构建一个使用qDebug
其变体(qWarning、QCritical 等)和自定义qDebug
消息处理程序的静态库。因此,每个qDebug
及其变体及其变体都被重定向到我们的消息处理程序。但是我们不想qDebug
在消息处理程序中处理应用程序及其变体。我们可以做的一种解决方法是在静态库中传递自定义调试消息类型并在回调QDebug
中检查它。qMessageHandler
但这安全吗?我们想到的另一种方法是创建一个类似于的类,并为每个相同的数据类型QDebug
重载流插入运算符<<
QDebug
做。在 Qt 5.2+ 中,我们有日志类别,可以轻松实现这一点。但不幸的是,我们必须在项目中使用 qt 4.7。任何人都可以告诉是否有更简单的方法来实现这一目标?提前致谢。
qt - 如果应用程序通过 cronjob 执行,Qt 输出(qDebug qWarning 等)将不起作用
我为此创建了一个复制样本:
构建步骤:
在交互式 shell 中执行应用程序时,输出重定向按预期工作:
设置:
输出:
但是,如果应用程序作为 cronjob 执行,则它不起作用,缺少 qDebug() 和 qWarning() 的输出:
设置:
输出:
环境变量
交互式shell中env的输出如下:
通过 cronjob 调用env的输出如下:
qt - qDebug 函数 char FirstDriveFromMask( ULONG unitmask )
尝试在 QT 中制作项目,我需要检测任何新的 USB 设备并在我的 main.cpp 中返回该字母。
我在谷歌上找到了这个,它应该可以工作,但我不知道如何通过调用函数 char FirstDriveFromMask(ULONG unitmask) 来使用简单的 qDebug() 在我的 main.cpp 中打印驱动程序字母。
你可以帮帮我吗?
c++ - Qt 调试提要不断发送垃圾邮件换行符
我在 QtCreator 中的调试提要有问题,它不断向换行符发送垃圾邮件。
如果我删除代码中的所有 qDebug() 调用,它工作正常并且什么也不输出。但是,如果调用 qDebug 一次(例如 qDebug() << "test"; 在 main 的开头),它将在该调用之后继续在输出提要中发送垃圾邮件换行符,直到我关闭我的应用程序。
主文件