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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Управление поведением qDebug() при запуске из Qt и без него  (Прочитано 9675 раз)
QuAzI
Гость
« : Март 09, 2012, 14:00 »

Хочется странного: Знать, когда программа выполняется в режиме отладки, когда в режиме релиза и главное - когда она запускается из под Qt, а когда без него.
Суть примерно такая:
При запуске из под Qt использовать стандартный вывод qDebug(), а при запуске без Qt через qInstallMsgHandler() хочу сбрасывать отладку в файл. Только как отследить, из чего запущен?
Записан
mutineer
Гость
« Ответ #1 : Март 09, 2012, 14:02 »

"Запуск из-под Qt" это вообще как и что?О_о
Записан
Blackwanderer
Гость
« Ответ #2 : Март 09, 2012, 14:17 »

Хочется странного: Знать, когда программа выполняется в режиме отладки, когда в режиме релиза

Код
C++ (Qt)
#ifdef QT_NO_DEBUG
....
#else
....
#endif
 
Записан
QuAzI
Гость
« Ответ #3 : Март 09, 2012, 14:39 »

"Запуск из-под Qt" это вообще как и что?О_о
Родной Qt Creator. А у вас куда ещё qDebug() по умолчанию выводит в режиме отладки?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Март 09, 2012, 14:42 »

Родной Qt Creator.

Прямо - никак. Лично я не парюсь, и через qInstallMsgHandler() всегда пишу отладку одновременно на консоль и в файл.
Записан
QuAzI
Гость
« Ответ #5 : Март 09, 2012, 14:50 »

Черный Странник, спасибо, получилось что-то такого плана в main.cpp
Код:
void myMessageOutput(QtMsgType type, const char *msg)
{
    QFileInfo fi(qApp->applicationFilePath());
    QString filename( fi.absolutePath() +"/"+ fi.baseName()+".log" );

       FILE *file;
       file = fopen(filename.toStdString().c_str(), "a");
    switch (type) {
    case QtDebugMsg:
        fprintf(file, "Debug: %s\n", msg);
        break;
    case QtWarningMsg:
        fprintf(file, "Warning: %s\n", msg);
        break;
    case QtCriticalMsg:
        fprintf(file, "Critical: %s\n", msg);
        break;
    case QtFatalMsg:
        fprintf(file, "Fatal: %s\n", msg);
        abort();
    }
       fclose(file);
}

int main(int argc, char *argv[])
{
...
    #ifdef QT_NO_DEBUG
    // release
    qInstallMsgHandler(myMessageOutput);
//    #else
    // debug

    #endif
Не полностью, но хоть что-то, а то прыгать туда-сюда по логам надоедает маленько =)
Записан
QuAzI
Гость
« Ответ #6 : Март 09, 2012, 14:53 »

Родной Qt Creator.

Прямо - никак. Лично я не парюсь, и через qInstallMsgHandler() всегда пишу отладку одновременно на консоль и в файл.
Можно наверное как вариант прикрутить параметр -debug к проектине и при его наличии кидать в консоль (соответственно в параметрах запуска проекта прописать параметр запуска), а при отсутствии в файл. Не так красиво, как с дефайнами, но тоже вариант. Позже допилю себе
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Март 10, 2012, 08:54 »

>>А у вас куда ещё qDebug() по умолчанию выводит в режиме отладки?
в консоль и креатора нет в помине.

П.С.
Qt - библиотека классов
Qt Creator - лишь IDE
Записан

Юра.
QuAzI
Гость
« Ответ #8 : Март 10, 2012, 11:47 »

Qt - библиотека классов
Qt Creator - лишь IDE
Библиотека? А Вика говорит
Цитировать
Qt — кросс-платформенный инструментарий разработки ПО на языке программирования C++.
Не вижу смысла разбирать Qt на тысячи запчастей и торжественно называть каждую в отдельности. До кучи, да, приложения пишут в консоль. А DLL фигушки. Но при использовании qInstallMsgHandler вывод qDebug из DLL на ура идёт в файлы. Одной консолью сыт не будешь.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #9 : Март 10, 2012, 16:58 »

>> А Вика говорит
Да Вика пусть хоть без трусов бегает, но если ты будешь IDE называть Qt, то кроме вчерашних дельфистов тебя никто не поймёт
Записан

Юра.
sudo
Гость
« Ответ #10 : Март 11, 2012, 10:08 »

Qt - библиотека классов
Qt Creator - лишь IDE
Библиотека? А Вика говорит
Цитировать
Qt — кросс-платформенный инструментарий разработки ПО на языке программирования C++.
Не вижу смысла разбирать Qt на тысячи запчастей и торжественно называть каждую в отдельности. До кучи, да, приложения пишут в консоль. А DLL фигушки. Но при использовании qInstallMsgHandler вывод qDebug из DLL на ура идёт в файлы. Одной консолью сыт не будешь.

А я на НетБинсе ещё писать умею, да. И на Дев-С++. А потом мы сотрудников по полгода найти не можем из-за того, что у них QtCreator - язык программирования
Записан
SASA
Гость
« Ответ #11 : Март 11, 2012, 14:58 »

А DLL фигушки. Но при использовании qInstallMsgHandler вывод qDebug из DLL на ура идёт в файлы. Одной консолью сыт не будешь.
Это неправда. В стандартные потоки можно писать отовсюду. И вообще, как пользоватся длл без исполнимого файла?
Записан
QuAzI
Гость
« Ответ #12 : Март 13, 2012, 15:26 »

А я на НетБинсе ещё писать умею, да. И на Дев-С++. А потом мы сотрудников по полгода найти не можем из-за того, что у них QtCreator - язык программирования
А я где-то писал, что Qt Creator - ЯП ? Для меня это среда разработки. В чём я не прав? Да, у с ней идут свои библиотеки, но от этого она не перестаёт быть средой разработки, с собственными (стандартными, если не ваять собственных подпольных сборок и мутантов) инструментами для написания и отладки кода.

SASA, тем не менее у меня из DLL вывод qDebug() не сыплется в консоль, особенно если dll подгружена в проект на Delphi.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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