Название: Лог работы приложения Отправлено: merke от Декабрь 25, 2010, 19:40 Всем привет!
Пишу приложение. нужно ввести полный лог его работы: 1. отлавливать все ошибки и писать их в лог 2. писать в лог каждый вход в процедуру или функцию например если программить на Visual Basic 6 там есть такое Код ... ... ... какой то код ... ... ... Код
Т.е. если происходит какая то ошибка в процедуре или функции, то срабатывает обработчик ошибок и меня перекидывает на Erh1 и уже вызываю функцию call setLog(err.msg); с текстом ошибки. Теперь как мне такое же реализовать на Qt? Использование try catch? Код: try Как понять, что за ошибка произошла? Подскажите, пожалуйста, буду очень благодарен помощи! Название: Re: Лог работы приложения Отправлено: Fat-Zer от Декабрь 25, 2010, 20:12 Это вопроса не кьюта, это вопрос C++
1) делаешь классы эксепшенов: Код 2) Обрабатываешь их примерно так: Код 3) ещё можно почитать про стандартные библиотечные эксепшины Название: Re: Лог работы приложения Отправлено: antzol от Декабрь 25, 2010, 20:15 Код: #include <stdexcept> Название: Re: Лог работы приложения Отправлено: brankovic от Декабрь 25, 2010, 21:31 Есть стандартный класс std::exception от которого рекомендуется наследовать все исключения. У него есть метод what, который говорит, что случилось. Поэтому ловить исключения надо так:
Код: try { /*some code*/ } Но в отличии от VB нельзя поймать деление на ноль или нарушение памяти (access violation). Поначалу лучше не увлекаться своими исключениями. Используй std::runtime_error: Код: if (bad) По возможности всем этим не надо пользоваться вообще, а делать просто: Код: if (bad) Название: Re: Лог работы приложения Отправлено: vunder от Декабрь 25, 2010, 21:50 У меня была похожая задача: в приложении нужно было организовать журнал событий.
В общем сделал так: - написал класс, характеризующий сообщение (тип, заголовок, текст и время); - форма в главном приложении перехватывает все события (events) и при получении класса-сообщения записывала его в журнал; Перехват событий через object::eventFilter(QObject *pobj, QEvent *pevent), ну а сам класс сообщения отнаследован от QEvent. Для подробностей могу привести полный код, но все-таки советую почитать про события (events) в Qt Название: Re: Лог работы приложения Отправлено: JamS007 от Декабрь 26, 2010, 00:39 Простите, что не создаю новую тему, но думаю тут эта информация тоже пригодиться.
vunder, подскажите может ли Ваш способ быть использован в многопоточном приложении. Я немного почитал про систему событий qt, и мне нравиться Ваш вариант, но так как у каждого потока свой обработчик событий, не будет ли очень накладным и сложным писать обмен событиями между потоками? Стоит ли вообще начинать, и если стоит, что для этого нужно? Название: Re: Лог работы приложения Отправлено: merke от Декабрь 26, 2010, 05:30 Спасибо, но QEvent будет не вариант.
Название: Re: Лог работы приложения Отправлено: vunder от Декабрь 27, 2010, 10:51 Цитировать vunder, подскажите может ли Ваш способ быть использован в многопоточном приложении. Я немного почитал про систему событий qt, и мне нравиться Ваш вариант, но так как у каждого потока свой обработчик событий, не будет ли очень накладным и сложным писать обмен событиями между потоками? Стоит ли вообще начинать, и если стоит, что для этого нужно? У меня именно многопоточное приложение и все работает отлично. Дополнительно писать ничего не нужно, т.к. поддержка многопоточности в Qt есть и для сингал/слотов, и для событий.Для объекта QApplication/QCoreApplication устанавливается фильтр событий. В форме отображения перекрывается метод bool eventFilter(QObject *, QEvent *), который из потока событий выбирает нужные события и отображает их в списке. |