Gestione degli errori

Si potrebbero verificare circostanze in cui l'app non funziona come previsto nelle fasi di progettazione iniziale, prova e distribuzione. In questi casi, può essere utile implementare metodi di presentazione e diagnosi degli errori.

Registri di console

Se l'app risponde in modo inatteso o incomprensibile, può essere utile fare riferimento ad una console per osservare cosa sta eseguendo l'app internamente. AppStudio contiene una console integrata (si veda Emissione della console di acquisizione per maggiori informazioni) e Qt Creator visualizza i messaggi della console quando presenta un'app in esecuzione. È possibile fornire ulteriori informazioni sulla console attraverso una riga di codice, al fine di fornire una proprietà potenzialmente utile o quale indicazione per una funzione con emissione complessa che non sta rispondendo correttamente.

Il seguente esempio di codice stampa una riga nel registro della console che visualizza il nuovo filepath quando viene modificato:

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

Per maggiore assistenza sull'uso della console, sotto forma tanto di emissione dal vivo quanto di file di registro, l'AppFramework di AppStudio fornisce un componente di Registro con una serie di funzioni volte ad aiutare nella configurazione dei registri di console.

Per avviare un registro di console, impostare la proprietà enabled nel componente di Registro su true. È possibile effettuare l'impostazione sullo sfondo per registrare l'intera sessione o attraverso un interruttore o pulsante per avviare la registrazione solo quando viene richiesto. Quando si avvia un registro, questo fa riferimento alla proprietà outputLocation per stabilire la destinazione e la forma di emissione. Questa destinazione può essere o un percorso di file, nel qual caso l'app sarà creata ed emessa in un file di registro, o l'URL di una console syslog, nel cui caso l'app sarà emessa direttamente lì. È possibile configurare la formattazione dei messaggi di registro attraverso la proprietà messagePattern.

La proprietà messagePattern utilizza una serie di segnaposto per strutturare le informazioni. Per visualizzare le informazioni desiderate nei messaggi delle console, includere i seguenti segnaposto:

SegnapostoDescrizione

%{appname}

QCoreApplication::applicationName>()

%{category}

Categoria di registro

%{file}

Percorso per il file di origine

%{function}

Funzione

%{line}

Riga nel file di origine

%{message}

Messaggio effettivo

%{pid}

QCoreApplication::applicationPid()

%{threadid}

L'ID di tutto il sistema del thread attuale (se si può ottenere)

%{qthreadptr}

Puntatore sul QThread attuale (risultato di QThread::currentThread()

%{type}

"debug", "avvertenza", "critico" o "irreversibile"

%{time process}

Tempo del messaggio, espresso in secondi, dall'avvio del processo

%{time boot}

Tempo del messaggio, espresso in secondi, dall'avvio del sistema, se è possibile determinarlo

%{time [format]}

Tempo del sistema quando è stato emesso il messaggio, formattato cambiando il formato a QDateTime::toString()

Aggiungere messaggi di errore

Ci sono anche errori che l'utente potrà prevedere e riconoscere ma non risolvere. Ciò potrebbe essere dovuto ad un limite insito dell'app; ad esempio, un'app che richiede un accesso costante ad un servizio online non funzionerà in un ambiente senza accesso a internet. Questo può essere gestito visualizzando un messaggio quando si emette il segnale onError fornito con molti componenti. Alcuni di questi componenti forniscono anche proprietà aggiuntive per informare l'utente in caso di errore, come la proprietà errorText di NetworkRequest.

Il seguente esempio di codice dimostra come immettere un messaggio di errore se NetworkRequest non funziona, con l'errore riportato dal messaggio di errore. Configura anche la richiesta di errore di rete, trasformandola in una richiesta impossibile.

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