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

sam*_*m-w 9 debugging qt gdb qt-creator c-preprocessor

标题:

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

执行:

void DebugErrTrace(char *String, ...) {
  ...
  qDebug() << String;
}
Run Code Online (Sandbox Code Playgroud)

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

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__调试行部分的超链接,链接到导致问题的行.有什么办法可以用我自己的调试输出来做到这一点吗?

干杯,山姆

ale*_*sdm 11

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

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

所以你可以构造的最简单的行看起来像这样:

qWarning("file:///%s:%i: %s", __FILE__, __LINE__, "your message");
qWarning("   Loc: [%s:%i] %s", __FILE__, __LINE__, "your message");
Run Code Online (Sandbox Code Playgroud)

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