有没有办法找到导致警告出现在Qt中的行?

时间:2017-03-08 16:22:35

标签: c++ qt warnings compiler-warnings traceback

在运行我的Qt5项目时,我收到警告,例如

json_decode

和其他人。

虽然许多答案涵盖了给定代码中的内容导致这些警告,或者如何纠正它们,但我想知道代码中的是生成的警告,是追溯。

这是因为我认为这是由于我错误地使用某些Qt功能导致内部警告,例如,在上述情况下,使用定时器执行的功能。知道行号对调试很有帮助,但遗憾的是,即使在调试模式下也没有显示。

有办法做到这一点吗?

This question似乎几乎相同,但我没有观察到与问题中发布的内容类似的内容 - 我没有看到任何行号。如果适用的话,我不知道如何在那里应用答案。

谢谢。

2 个答案:

答案 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;

这在我需要时在调试器模式下运行时提供了正确的回溯。