Russian Qt Forum

Qt => Вопросы новичков => Тема начата: QuAzI от Март 09, 2012, 14:00



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


Название: Re: Управление поведением qDebug() при запуске из Qt и без него
Отправлено: mutineer от Март 09, 2012, 14:02
"Запуск из-под Qt" это вообще как и что?О_о


Название: Re: Управление поведением qDebug() при запуске из Qt и без него
Отправлено: Blackwanderer от Март 09, 2012, 14:17
Хочется странного: Знать, когда программа выполняется в режиме отладки, когда в режиме релиза

Код
C++ (Qt)
#ifdef QT_NO_DEBUG
....
#else
....
#endif
 


Название: Re: Управление поведением qDebug() при запуске из Qt и без него
Отправлено: QuAzI от Март 09, 2012, 14:39
"Запуск из-под Qt" это вообще как и что?О_о
Родной Qt Creator. А у вас куда ещё qDebug() по умолчанию выводит в режиме отладки?


Название: Re: Управление поведением qDebug() при запуске из Qt и без него
Отправлено: Alex Custov от Март 09, 2012, 14:42
Родной Qt Creator.

Прямо - никак. Лично я не парюсь, и через qInstallMsgHandler() всегда пишу отладку одновременно на консоль и в файл.


Название: Re: Управление поведением qDebug() при запуске из Qt и без него
Отправлено: QuAzI от Март 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
Не полностью, но хоть что-то, а то прыгать туда-сюда по логам надоедает маленько =)


Название: Re: Управление поведением qDebug() при запуске из Qt и без него
Отправлено: QuAzI от Март 09, 2012, 14:53
Родной Qt Creator.

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


Название: Re: Управление поведением qDebug() при запуске из Qt и без него
Отправлено: lit-uriy от Март 10, 2012, 08:54
>>А у вас куда ещё qDebug() по умолчанию выводит в режиме отладки?
в консоль и креатора нет в помине.

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


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


Название: Re: Управление поведением qDebug() при запуске из Qt и без него
Отправлено: lit-uriy от Март 10, 2012, 16:58
>> А Вика говорит
Да Вика пусть хоть без трусов бегает, но если ты будешь IDE называть Qt, то кроме вчерашних дельфистов тебя никто не поймёт


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

А я на НетБинсе ещё писать умею, да. И на Дев-С++. А потом мы сотрудников по полгода найти не можем из-за того, что у них QtCreator - язык программирования


Название: Re: Управление поведением qDebug() при запуске из Qt и без него
Отправлено: SASA от Март 11, 2012, 14:58
А DLL фигушки. Но при использовании qInstallMsgHandler вывод qDebug из DLL на ура идёт в файлы. Одной консолью сыт не будешь.
Это неправда. В стандартные потоки можно писать отовсюду. И вообще, как пользоватся длл без исполнимого файла?


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

SASA, тем не менее у меня из DLL вывод qDebug() не сыплется в консоль, особенно если dll подгружена в проект на Delphi.