当打印到 Qt Creator 的调试控制台时,__FILE__ 和 __LINE__ 可以链接吗?

发布于 2024-12-12 05:29:39 字数 747 浏览 0 评论 0原文

标题:

#define TRACE_ERROR(s)                      \
{
  ...
  char TraceBuffer[512];
  sprintf(TraceBuffer, "%s\t(%s:%d)", s, __FILE__, __LINE__);
  DebugErrTrace(TraceBuffer);
  ...
}

实现:

void DebugErrTrace(char *String, ...) {
  ...
  qDebug() << String;
}

上面输出了一行调试跟踪,可能看起来像

ERROR File Missing! (..\trunk\Common\FileManager.cpp:102)

在 Qt Creator 的调试控制台中。

我注意到 Qt 自己的错误消息,例如

Object::connect: No such slot cClass::Method(QString) in ..\trunk\Components\Class.cpp:301

创建看起来像调试行的 __FILE__:__LINE__ 部分周围的超链接,链接到导致问题的行。有什么办法可以用我自己的调试输出来做到这一点吗?

干杯,萨姆

Header:

#define TRACE_ERROR(s)                      \
{
  ...
  char TraceBuffer[512];
  sprintf(TraceBuffer, "%s\t(%s:%d)", s, __FILE__, __LINE__);
  DebugErrTrace(TraceBuffer);
  ...
}

Implementation:

void DebugErrTrace(char *String, ...) {
  ...
  qDebug() << String;
}

The above spits out a line of debug trace, which might look something like

ERROR File Missing! (..\trunk\Common\FileManager.cpp:102)

in Qt Creator's debug console.

I've noticed that Qt's own error messages e.g.

Object::connect: No such slot cClass::Method(QString) in ..\trunk\Components\Class.cpp:301

create what looks like a hyperlink around the __FILE__:__LINE__ part of the debug line, linking to the line which caused the problem. Is there any way I can I do this with my own debug output?

Cheers, Sam

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心清如水 2024-12-19 05:29:40

除了 alexisdm 的回答(这对我很有帮助,非常感谢!):

我建议在较新版本的 Qt 中执行以下操作并使用 qDebug 本身,而不是定义自定义宏:

qSetMessagePattern("%{if-category}%{category}: %{endif}%{message}\n   Loc: [%{file}:%{line}]");

该部分\n 之前是 Qt 的默认消息模式,使用 \n 进行拆分的好处是日志消息还可以包含 [ 或 <代码>] 没有搞乱链接。

消息模式可以轻松地使用其他日志详细信息(如时间戳、线程 ID 等)进行扩展,请参阅 文档。添加其他详细信息时,请将链接保留在单独的行中,以避免 Qt Creator 的解析出现问题。

In addition to alexisdm's answer (which helped me very much, big thanks!):

Instead of defining a custom macro, I would suggest to do the following in newer versions of Qt and use qDebug itself:

qSetMessagePattern("%{if-category}%{category}: %{endif}%{message}\n   Loc: [%{file}:%{line}]");

The part before \n is Qt's default message pattern, and splitting with \n has the benefit that the log messages also can contain characters like [ or ] without messing up the links.

The message pattern can easily be extended with other log details like timestamps, thread id and so on, see the documentation. When adding other details, keep the link in a seperate line to avoid issues with Qt Creator's parsing.

怪我鬧 2024-12-19 05:29:39

根据Qt Creator源代码(有),超链接仅针对与这些正则表达式匹配的行创建:

"^(?:\\[Qt Message\\] )?(file:///.+:\\d+(?::\\d+)?):"
"Object::.*in (.*:\\d+)"
"ASSERT: .* in file (.+, line \\d+)"
"^   Loc: \\[(.*)\\]"

因此,您可以构造的最简单的行如下所示:

qWarning("file:///%s:%i: %s", __FILE__, __LINE__, "your message");
qWarning("   Loc: [%s:%i] %s", __FILE__, __LINE__, "your message");

Qt Creator 似乎并不关心后面的路径是否"file:///" 是否是绝对的。

According to Qt Creator source code (there), the hyperlinks are only created for lines matching these regular expressions:

"^(?:\\[Qt Message\\] )?(file:///.+:\\d+(?::\\d+)?):"
"Object::.*in (.*:\\d+)"
"ASSERT: .* in file (.+, line \\d+)"
"^   Loc: \\[(.*)\\]"

So the simplest lines you could construct look like this:

qWarning("file:///%s:%i: %s", __FILE__, __LINE__, "your message");
qWarning("   Loc: [%s:%i] %s", __FILE__, __LINE__, "your message");

Qt Creator doesn't seem to care if the path after "file:///" is absolute or not.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文