Можно ли сделать __FILE__ и __LINE__ связанными при печати на консоли отладки Qt Creator? - PullRequest
9 голосов
/ 27 октября 2011

Заголовок:

#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__ части строки отладки, ссылающуюся на строку, вызвавшую проблему.Есть ли способ, которым я могу сделать это с моим собственным выводом отладки?

Приветствия, Сэм

Ответы [ 2 ]

11 голосов
/ 27 октября 2011

Согласно исходному коду 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:///" абсолютным или нет.

1 голос
/ 04 апреля 2017

В дополнение к ответу alexisdm (который мне очень помог, большое спасибо!):

Вместо определения пользовательского макроса, я бы предложил сделать следующее в более новых версиях Qt и использовать сам qDebug:

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

Часть перед \n является шаблоном сообщений Qt по умолчанию, а разделение на \n имеет то преимущество, что сообщения журнала также могут содержать символы, такие как [ или ], не путая ссылки.

Шаблон сообщения можно легко дополнить другими данными журнала, такими как отметки времени, идентификатор потока и т. Д., См. Документацию . При добавлении других деталей держите ссылку в отдельной строке, чтобы избежать проблем с разбором Qt Creator.

...