Russian Qt Forum
Ноябрь 22, 2024, 21:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отладочные сообщения  (Прочитано 6518 раз)
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« : Июль 09, 2014, 18:45 »

Простая обертка, которая позволяет выводить определенные сообщения с указанием файла, функции и строки, где она использовалась Улыбающийся

Код
C++ (Qt)
#include <QDebug>
 
#define OUT_MESSAGE "\"%s\": in file \"%s\", func \"%s\", line %i"
#define WARNING( msg )  qWarning( OUT_MESSAGE,  qPrintable( msg ), __FILE__, __FUNCTION__, __LINE__ );
#define CRITICAL( msg ) qCritical( OUT_MESSAGE, qPrintable( msg ), __FILE__, __FUNCTION__, __LINE__ );
#define FATAL( msg )    qFatal( OUT_MESSAGE,    qPrintable( msg ), __FILE__, __FUNCTION__, __LINE__ );
 

Пример:
Код
C++ (Qt)
void FileListModel::itemChanged() {
   FileItem * item = qobject_cast<FileItem *> (sender());
   if (!item) {
       WARNING("null pointer!");
       return;
   }
...
 

Консоль:

"null pointer!": in file "..\ListFiles\filelistmodel.cpp", func "itemChanged", line 47
Записан

kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Июль 09, 2014, 21:15 »

Вообще, в Qt5 есть QLoggingCategory с помощью которого можно много чего навыводить.
Записан

ArchLinux x86_64 / Win10 64 bit
Bepec
Гость
« Ответ #2 : Июль 09, 2014, 21:40 »

Тут дело в сокращении вызова. Warning() проще чем qCDebug(MyCategory) << "bla bla".
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Июль 09, 2014, 22:03 »

Эмм.. Но ты можешь переопределить Message Handler (или как там его) и выводить аналогичное с помощью qCDebug(Warning/Critical)():

Код
C++ (Qt)
qCDebug(category) << "null pointer!";
qCDebug(category, "null pointer!");
qCDebug(category) << "my pointer:" << mypointer;
qCDebug(category, "my pointer: %p", mypointer);
 

это удобнее, т.к. можно выводить любые данные и не заморачиваться с макросами и прочим.

« Последнее редактирование: Июль 09, 2014, 22:08 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #4 : Июль 09, 2014, 22:18 »

на самом деле никто не мешает все запихнуть в макрос:

Код:
#define MY_WARN qWarning() << __FILE__ << __FUNCTION__

MY_WARN << "lolo" << 1 << 2 << 3;
Записан

Гугль в помощь
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Июль 09, 2014, 23:33 »

Интересные и хорошие варианты были предложены Улыбающийся
Записан

Bepec
Гость
« Ответ #6 : Июль 10, 2014, 00:03 »

Эх был бы вывод дебажный в строчку, чтоб вывел все локальные и глобальные переменные и их значения + строчку + файл и всё это автоматом Веселый

PS кто знает, мб есть какая нить утварь с таким функционалом? Улыбающийся
« Последнее редактирование: Июль 10, 2014, 00:05 от Bepec » Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #7 : Июль 10, 2014, 07:59 »

Эх был бы вывод дебажный в строчку, чтоб вывел все локальные и глобальные переменные и их значения + строчку + файл и всё это автоматом Веселый

PS кто знает, мб есть какая нить утварь с таким функционалом? Улыбающийся

Локальные переменные невозможно перечислить в C++. А вот стеки можно получать, надо копать в сторону google breakpad, там есть трассировщик стека и символизатор.

Стек намного полезнее, чем строка в файле.

Записан

Гугль в помощь
Bepec
Гость
« Ответ #8 : Июль 10, 2014, 09:13 »

Ну... Получить можно и перечислить тоже Улыбающийся я же говорю не о возможностях С++, а об утилитке аля moc. Кстати мысль... А почему же тогда никто этого не сделал? Показает язык

Ну всмысле перед компиляцией пробегаемся и анализируем код, потом на место метки-вызова ставим код вызова. Ммм...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.102 секунд. Запросов: 23.