Fehlerverwaltung

Während des ersten Entwurfs, der Tests und der Bereitstellung kann es immer wieder vorkommen, dass eine App nicht wie erwartet funktioniert. Für diese Situationen kann sich die Implementierung von Möglichkeiten zur Fehlerdarstellung und -diagnose als nützlich erweisen.

Konsolenprotokolle

Wenn sich eine App nicht erwartungsgemäß verhält oder Sie ein Verhalten nicht verstehen, kann es hilfreich sein, die internen Vorgänge der App in einer Konsole zu beobachten. AppStudio enthält eine integrierte Konsole (weitere Informationen finden Sie unter Erfassen der Konsolen-Ausgabe). Wenn eine App in Qt Creator ausgeführt wird, werden Konsolenmeldungen angezeigt. Zusätzliche Konsoleninformationen können über eine Codezeile bereitgestellt werden, um eine möglicherweise hilfreiche Eigenschaft anzugeben. Dies kann auch als Signpost für eine Funktion mit komplexer Ausgabe dienen, die ein fehlerhaftes Verhalten aufweist.

Mit dem folgenden Codebeispiel wird eine Zeile im Konsolenprotokoll ausgegeben, das den neuen filepath angibt, wenn dieser geändert wird:

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

Für eine erweiterte Konsolenunterstützung in Form von Live-Ausgabe und Protokolldateien stellt AppStudio AppFramework eine Protokollierungskomponente mit einer Reihe von Funktionen bereit, die Sie bei der Arbeit mit Konsolenprotokollen und deren Konfiguration unterstützen.

Zum Starten eines Konsolenprotokolls setzen Sie die Eigenschaft enabled in der Protokollierungskomponente auf true. Sie kann so eingestellt werden, dass eine gesamte Sitzung im Hintergrund protokolliert oder die Protokollierung bei Bedarf über einen Schalter bzw. eine Schaltfläche gestartet wird. Wenn ein Protokoll gestartet wird, ermittelt es anhand der Eigenschaft outputLocation den Speicherort und die Ausgabeform. Bei diesem Ziel kann es sich entweder um einen Dateipfad (die App erstellt eine Protokolldatei und die Ausgabe erfolgt in dieser Datei) oder die URL einer syslog-Konsole (die Ausgabe der App erfolgt direkt in der Konsole) handeln. Die Formatierung von Protokollmeldungen ist über die Eigenschaft messagePattern konfigurierbar.

Mit der Eigenschaft messagePattern werden Informationen unter Verwendung einer Reihe von Platzhaltern strukturiert. Damit die gewünschten Informationen in Konsolenmeldungen angezeigt werden, müssen Sie die folgenden Platzhalter einfügen:

PlatzhalterBeschreibung

%{appname}

QCoreApplication::applicationName>()

%{category}

Protokollierungskategorie

%{file}

Pfad zur Quelldatei

%{function}

Funktion

%{line}

Zeile in Quelldatei

%{message}

Die tatsächliche Meldung

%{pid}

QCoreApplication::applicationPid()

%{threadid}

Die systemweite ID des aktuellen Threads (sofern sie abgerufen werden kann)

%{qthreadptr}

Ein Zeiger auf den aktuellen QThread (Ergebnis von QThread::currentThread()

%{type}

"debug", "warning", "critical" oder "fatal"

%{time process}

Zeit der Meldung in Sekunden seit Prozessstart

%{time boot}

Zeit der Meldung in Sekunden seit Systemstart, sofern feststellbar

%{time [format]}

Systemzeit, zu der die Meldung erfolgte, formatiert durch Übergabe des Formats an QDateTime::toString()

Hinzufügen von Fehlermeldungen

Einige Fehler können vorhergesagt und erkannt, aber nicht behoben werden. Dies kann durch eine unvermeidbare Einschränkung der App bedingt sein: So funktioniert beispielsweise eine App, die konstanten Zugriff auf einen Online-Service benötigt, in einer Umgebung ohne Internetzugriff nicht. Hier kann Abhilfe geschaffen werden, indem eine Meldung angezeigt wird, wenn das in vielen Komponenten bereitgestellte Signal onError ausgegeben wird. Einige dieser Komponenten bieten ebenfalls zusätzliche Eigenschaften, um den Benutzer bei einem Fehler zu informieren. Ein Beispiel hierfür ist die NetworkRequest-Eigenschaft errorText.

Im folgenden Codebeispiel wird gezeigt, wie eine Fehlermeldung für das Fehlschlagen von NetworkRequest eingeführt wird. Die Meldung enthält den zurückgegebenen Fehler. Zudem wird in dem Beispiel das Fehlschlagen der Netzwerkanforderung vorbereitet, indem die Anweisung für eine unmögliche Anforderung erstellt wird.

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();
    }
}