-
Data: 2019-05-07 21:38:29
Temat: Re: Ada Tutorial - w Instytucie Lotnictwa
Od: Szyk Cech <s...@s...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]> 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.err
orCode()).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::eUn
known)); \
} \
catch(...) \
{ \
gCritical(QObject::tr("Unknown exception occurs!"),
QObject::tr("Unkonwn"),
static_cast<quint64>(EnergoKodTools::eErrorCode::eUn
known)); \
}
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...
Następne wpisy z tego wątku
- 07.05.19 22:52 heby
- 08.05.19 07:54 Maciej Sobczak
- 08.05.19 15:32 Wojciech Muła
- 08.05.19 19:31 heby
- 08.05.19 19:51 heby
- 09.05.19 08:04 Maciej Sobczak
- 09.05.19 08:21 Maciej Sobczak
- 09.05.19 11:32 Roman Tyczka
- 09.05.19 18:19 heby
- 09.05.19 18:34 heby
- 09.05.19 19:29 Wojciech Muła
- 10.05.19 08:03 Maciej Sobczak
- 10.05.19 08:21 Maciej Sobczak
- 10.05.19 20:33 heby
- 10.05.19 21:00 heby
Najnowsze wątki z tej grupy
- Nowa ustawa o ochronie praw autorskich - opis problemu i szkic ustawy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
Najnowsze wątki
- 2025-03-19 Brak ograniczeń dla chińskiego kapitału - wam nie do rządu, tylko na zmywak do chińskiej knajpy!!!
- 2025-03-19 Wietnam wykłada 500M$ i chce zbudować fabrykę za 50G$
- 2025-03-19 szal-Unia == federacja policyjna
- 2025-03-19 Polsza == państwo policyjne
- 2025-03-19 Grzegorz Płaczek o programie szczepień dzieci. ,,Stworzono eldorado dla firm farmaceutycznych"
- 2025-03-19 Wietnam wykłada 500M$ i chce zbudować fabrykę za 50G$
- 2025-03-19 Gemini
- 2025-03-19 Mokry sen Zenka :)
- 2025-03-19 Re: Dlaczego tak odstają od Tesli?
- 2025-03-19 Czy grupa p.s.prawo przetrwa najbliższe wybory (prezydenta)?
- 2025-03-19 Warszawa => Frontend Developer (obszar Angular13+) <=
- 2025-03-19 Czy "niedopuszczony pełnomocnik" jest w prawie się na to skarżyć jak "świadek" zmarła bez zostawienia mu takiej instrukcji?
- 2025-03-19 Kraków => Business Development Manager - Network and Network Security
- 2025-03-19 Ostrów Świętokrzy => Node.js / Fullstack Developer <=
- 2025-03-19 Kraków => IT Expert (Network Systems area) <=