🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #215545

Re: Ada Tutorial - w Instytucie Lotnictwa

#215545
From: Szyk Cech
Date: Tue, 07 May 2019 19:38
90 lines
4236 bytes
> Zadanie dla chętnych: w ilu miejscach może tu polecieć wyjątek?

Kogo to obchodzi? Moje (proste i sprawdzone w praktyce w programowaniu w 
C++ z Qt od 10 lat) zasady obsługi wyjątków są takie:

1. Każda klasa wyjątku dziedziczy po std::exception (tego przestrzegają 
też klasy wyjątków Qt),

2. Obstawiamy funkcję main czymś takim:

#define MAIN_CONSOLE_CATCH \
     catch(Exception& aEx)   \
     {   \
         QTextStream lErr(stderr);   \
         lErr << QObject::tr("Exception occurs! Sender: %1, Error code: 
%2\nMessage:\n%3").arg(aEx.senderName()).arg(aEx.errorCode()).arg(aEx.what()).toUtf8() 
<< endl << flush;  \
         return EXIT_FAILURE;    \
     }   \
     catch(std::exception& aEx)  \
     {   \
         QTextStream lErr(stderr);   \
         lErr << QObject::tr("Exception 
occurs!\nMessage:\n%1").arg(aEx.what()).toUtf8() << endl << flush;    \
         return EXIT_FAILURE;    \
     }   \
     catch(...)  \
     {   \
         QTextStream lErr(stderr);   \
         lErr << QObject::tr("Unknown exception occurs!") << endl << 
flush;   \
         return EXIT_FAILURE;    \
     }


3. Obstawiamy wszystkie funkcje obsługi zdarzeń
4. Obstawiamy wszystkie funkcje wątków, obie czymś takim:

#define STANDARD_CATCH \
     catch(Exception& aEx) \
     { \
         gCritical(QObject::tr("Exception occurs!\n%1").arg(aEx.what()), 
aEx.senderName(), static_cast<quint64>(aEx.errorCode())); \
     } \
     catch(std::exception& aEx) \
     { \
         gCritical(QObject::tr("Exception occurs!\n%1").arg(aEx.what()), 
QObject::tr("Unkonwn"), 
static_cast<quint64>(EnergoKodTools::eErrorCode::eUnknown)); \
     } \
     catch(...) \
     { \
         gCritical(QObject::tr("Unknown exception occurs!"), 
QObject::tr("Unkonwn"), 
static_cast<quint64>(EnergoKodTools::eErrorCode::eUnknown)); \
     }

Gdzie gCritical jest czymś takim:

inline void gCritical(QString aText, QString aSender, quint64 aErrorCode)
{
     Errors::instance()->error(aText, eErrorType::eCritical, aSender, 
aErrorCode);
     gMessage(QMessageBox::Critical, QObject::tr("Critical"), aText, 
QStringLiteral("Error: %1\nModule: %2\nCode: 
%3").arg(aText).arg(aSender).arg(aErrorCode));
}

Errors to klasa "silnik", singleton zbierania błędów (do ew. 
wyświetlenia i ew. zaraportowania).
A gMessage to:

inline void gMessage(QMessageBox::Icon aIcon, QString aShortText, 
QString aInformativeText, QString aDetailedText = QStringLiteral(""))
{
     QTextStream lErrStream(stderr);
     lErrStream << QObject::tr("%1 
%2\n%3").arg(qApp->applicationName()).arg(aShortText).arg(aInformativeText);
     if(!aDetailedText.isEmpty())
         lErrStream << endl << aDetailedText;

     QMessageBox lMessage;
     lMessage.setText(aShortText);
     lMessage.setInformativeText(aInformativeText);
     lMessage.setDetailedText(aDetailedText);
     lMessage.setIcon(aIcon);
     lMessage.exec();
}

I wtedy wszystko jest proste...
Technical Details
Message-ID: <W8lAE.148935$wd2.140925@fx24.fr7>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!2.eu.feeder.erje.net!newsfeed.xs4all.nl!newsfeed9.news.xs4all.nl!85.12.16.69.MISMATCH!peer02.ams1!peer.ams1.xlned.com!news.xlned.com!peer04.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!fx24.fr7.POSTED!not-for-mail
References: <c1760262-b4a3-44fe-a99e-2fa16be86820@googlegroups.com> <btKtE.25850$wd2.16727@fx24.fr7> <9537dd39-0164-41a6-803b-393b77b4a701@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!2.eu.feeder.erje.net!newsfeed.xs4all.nl!newsfeed9.news.xs4all.nl!85.12.16.69.MISMATCH!peer02.ams1!peer.ams1.xlned.com!news.xlned.com!peer04.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!fx24.fr7.POSTED!not-for-mail
Subject: Re: Ada Tutorial - w Instytucie Lotnictwa
Newsgroups: pl.comp.programming
References: <c1760262-b4a3-44fe-a99e-2fa16be86820@googlegroups.com> <btKtE.25850$wd2.16727@fx24.fr7> <9537dd39-0164-41a6-803b-393b77b4a701@googlegroups.com>
From: Szyk Cech <szykcech@spoko.pl>
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1
MIME-Version: 1.0
In-Reply-To: <9537dd39-0164-41a6-803b-393b77b4a701@googlegroups.com>
Lines: 90
Message-ID: <W8lAE.148935$wd2.140925@fx24.fr7>
X-Complaints-To: abuse(at)newshosting.com
NNTP-Posting-Date: Tue, 07 May 2019 19:38:30 UTC
Organization: Newshosting.com - Highest quality at a great price! www.newshosting.com
Date: Tue, 7 May 2019 21:38:29 +0200
X-Received-Bytes: 4064
X-Received-Body-CRC: 1221694303
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit