在运行我的Qt5项目时,我收到警告,例如
json_decode
和其他人。
虽然许多答案涵盖了给定代码中的内容导致这些警告,或者如何纠正它们,但我想知道代码中的是生成的警告,是追溯。
这是因为我认为这是由于我错误地使用某些Qt功能导致内部警告,例如,在上述情况下,使用定时器执行的功能。知道行号对调试很有帮助,但遗憾的是,即使在调试模式下也没有显示。
有办法做到这一点吗?
This question似乎几乎相同,但我没有观察到与问题中发布的内容类似的内容 - 我没有看到任何行号。如果适用的话,我不知道如何在那里应用答案。
谢谢。
答案 0 :(得分:1)
最好的方法是设置一个断点,就像其他人提到的那样。
在Linux上,还可以在消息模式中包含回溯:
qSetMessagePattern("%{file}:%{line} - %{message}\n%{backtrace depth=10 separator=\"\n\"}");
查看its documentation,特别是限制。 示例输出:
/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()
函数,而是打印?myapp?
。
答案 1 :(得分:0)
nwp在评论中通过this answer指出了Nawaz,当我在警告消息行中设置断点时,这很有效:
case QtWarningMsg:
fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); //break point here
break;
这在我需要时在调试器模式下运行时提供了正确的回溯。