是否有一种方法可以找到导致警告出现在QT中的线路
Is there a way to find the line that caused a warning to appear in Qt?
运行QT5项目时,我会收到
之类的警告QObject::startTimer: Timers cannot be started from another thread
和其他。
虽然许多答案涵盖了给定代码中引起的警告或如何纠正它们的内容,但我想知道 where 是生成的警告。
这是因为我认为这是由于我对某些QT功能的错误用法引起的,该功能会在内部引起警告,例如在上述情况下,使用计时器执行的功能。知道行号有助于调试,但不幸的是,即使在调试模式下也没有显示。
有办法做到这一点吗?
这个问题似乎几乎是相同的,但是我没有观察到与那里的问题相似的东西 - 我看不到任何行号。如果适用,我不明白如何在那里应用答案。
谢谢。
最好的方法是设置一个断点,如其他提到的。
在Linux上,也可以在消息模式中包含回溯:
qSetMessagePattern("%{file}:%{line} - %{message}n%{backtrace depth=10 separator="n"}");
可以查看其文档,尤其是针对限制。示例输出:
/home/thomas/src/Qt/5.8-desktop/qtbase/src/corelib/kernel/qobject.cpp:1639 - QObject::startTimer: Timers can only be used with threads started with QThread
QObject::startTimer
QTimer::start
?myapp?
__libc_start_main
?myapp?
由于我没有与-rdynamic
链接,因此main()
函数在backtrace中不知道,而?myapp?
则是打印的。
nwp,在评论中指出了纳瓦兹的答案,当我在警告消息线上放置一个断点时,它的功能很棒,此处:
case QtWarningMsg:
fprintf(stderr, "Warning: %s (%s:%u, %s)n", localMsg.constData(), context.file, context.line, context.function); //break point here
break;
在调试器模式下运行时,这给出了适当的追溯。
相关文章:
- 警告处理为错误这里有什么问题
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 使用typeid警告未使用的变量
- 示例C++项目编译中的警告
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 如何修复编译器警告 C6386 和 C6385?
- 返回语句后的代码,没有警告
- 获取隐式转换溢出从无符号到已签名的警告
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 在未链接的部分上生成警告
- 警告 C4552:">>":未使用表达式的结果
- 禁止显示由于常量为零而比较始终为假的警告
- 是否有一种方法可以找到导致警告出现在QT中的线路
- 如何识别导致Qt警告消息的线路?