Zarządzanie błędami

Czasami może się zdarzyć, że podczas wstępnego inicjowania, testowania i wdrażania aplikacja nie działa zgodnie z oczekiwaniami. Jeśli wystąpi taka sytuacja, użyteczne może być zaimplementowanie sposobów prezentowania i diagnozowania błędów.

Dzienniki konsoli

W przypadku zaobserwowania nieoczekiwanego lub niezrozumiałego zachowania aplikacji pomocne może być odwołanie się do konsoli w celu sprawdzenia wewnętrznego działania aplikacji. Aplikacja AppStudio zawiera wbudowaną konsolę (więcej informacji na ten temat zawiera sekcja Przechwytywanie danych wynikowych z konsoli), a program Qt Creator wyświetla komunikaty konsoli, jeśli aplikacja została uruchomiona w tym programie. Dodatkowe informacje z konsoli mogą być dostarczane za pośrednictwem wiersza kodu, na przykład w celu udostępnienia użytecznej właściwości lub jako wskaźnik dla funkcji ze złożonymi danymi wynikowymi, która może zachowywać się niepoprawnie.

Następujący przykładowy kod powoduje wyprowadzenie do dziennika konsoli wiersza danych zawierającego nową ścieżkę filepath (w przypadku jej modyfikacji):

        TextField {
            Layout.fillWidth: true
            text: fileFolder.path
            onEditingFinished: {
                fileFolder.path = text.trim();
                console.log("New filepath:", fileFolder.path);
            }
        }

W celu zapewnienia bardziej zaawansowanej obsługi konsoli, zarówno w postaci aktualnych danych wynikowych, jak i plików dziennika, moduł AppStudio AppFramework udostępnia komponent Logging zawierający szereg funkcji przeznaczonych do obsługi i konfigurowania dzienników konsoli.

Aby uruchomić dziennik konsoli, ustaw właściwość enabled w komponencie Logging na wartość true. Istnieje możliwość ustawienia rejestrowania całej sesji w tle lub uruchamiania rejestrowania na żądanie za pomocą przełącznika lub przycisku. Po uruchomieniu dziennika odwołuje się on do właściwości outputLocation w celu ustalenia miejsca i formy danych wynikowych. To miejsce docelowe może być wskazane za pomocą ścieżki do pliku (w tym przypadku aplikacja utworzy dane wynikowe i umieści je w pliku dziennika) lub za pomocą adresu URL konsoli zgodnej ze standardem syslog (w tym przypadku aplikacja umieści dane wynikowe bezpośrednio w tym miejscu). Formatowanie komunikatów dziennika można skonfigurować za pomocą właściwości messagePattern.

Właściwość messagePattern używa szeregu symboli zastępczych w celu ustrukturyzowania informacji. Aby wyświetlić wymagane informacje w komunikatach konsoli, dołącz następujące symbole zastępcze:

Symbol zastępczyOpis

%{appname}

QCoreApplication::applicationName>()

%{category}

Kategoria rejestrowania

%{file}

Ścieżka do pliku źródłowego

%{function}

Funkcja

%{line}

Wiersz w pliku źródłowym

%{message}

Rzeczywisty komunikat

%{pid}

QCoreApplication::applicationPid()

%{threadid}

Identyfikator bieżącego wątku obowiązujący w całym systemie (jeśli można go uzyskać)

%{qthreadptr}

Wskaźnik do bieżącego wątku QThread (wynik funkcji QThread::currentThread())

%{type}

"debug", "warning", "critical" lub "fatal"

%{time process}

Czas komunikatu (w sekundach) od momentu uruchomienia procesu

%{time boot}

Czas komunikatu (w sekundach) od momentu uruchomienia systemu (jeśli można go określić)

%{time [format]}

Czas systemowy wystąpienia komunikatu sformatowany przez przekazanie formatu do funkcji QDateTime::toString()

Dodawanie komunikatów o błędach

Istnieją również błędy, które można przewidzieć i rozpoznać, ale nie można ich rozwiązać. Mogą być one spowodowane ograniczeniami aplikacji, których nie można uniknąć, na przykład aplikacja wymagająca stałego dostępu do usługi online nie będzie działać w środowisku bez dostępu do internetu. Takie błędy można obsłużyć przez wyświetlenie komunikatu po wyemitowaniu sygnału onError dostępnego w wielu komponentach. Niektóre z tych komponentów udostępniają również dodatkowe właściwości umożliwiające poinformowanie użytkownika w przypadku wystąpienia błędu, takie jak właściwość NetworkRequest errorText.

Poniższy przykładowy kod demonstruje sposób utworzenia komunikatu o błędzie w przypadku niepowodzenia NetworkRequest, gdzie komunikat o błędzie będzie zawierać zwracany błąd. Skonfigurowano w nim również nieudane żądanie sieciowe poprzez wygenerowanie niemożliwego do wykonania żądania.

MessageDialog {
    id: messageDialog
    title: "Network error"
    text: "Error code: "  + networkRequest.errorCode + "\n" + networkRequest.errorText
}
NetworkRequest {
    id: networkRequest
    url: "http://appstudio.arcgis.com/images/index/introview.jpg2"
    responseType: "json"
    onError: {
        messageDialog.open();
    }
}
Button {
    id: sendBtn
    text: "Send Request"
    onClicked: {
        networkRequest.send();
    }
}