2012-05-01 25 views
8

Sono nuovo di programmazione Vala ed avere esperienze con Java e .NET ma non sono stato in grado di trovare qualcosa di utile su come effettuare il login con Vala. C'è qualche funzione di registrazione utile come log4j o log4net o qual è il modo suggerito per accedere a Vala con il ridimensionamento in diversi livelli di registrazione come errore, warn, debug e trace? E che dire della programmazione difensiva come asserzioni e contratti? C'è qualche o qual è il modo suggerito per fare una programmazione difensiva e ottenere i registri più utili con tracce di stack e una causa root precisa? Grazie per un consiglio.registrazione con Vala

risposta

22

Logging

Vala ha alcuni piuttosto robuste strutture di registrazione integrate. È possibile utilizzare debug(), message(), warning(), error(), e critical() come scorciatoie per il leggermente più complessa funzione log(). Tutti sono inclusi nella base (automaticamente inclusa) GLib namespace.

Se si desidera reindirizzare l'uscita log o inviare diversi tipi di messaggi a diverse destinazioni, tutto ciò che serve è nel GLib.Log namespace. Potresti voler leggere lo glib docs on logging per quello che succede dietro le quinte di là.

Programmazione difensiva

Vala include anche il supporto per le affermazioni e contratti. La versione corta: assert() e assert_not_reached() per asserzioni, e requires() e ensures() nel metodo di firme per i contratti. Vedi la sezione tutorial su Assertions and Contract Programming per maggiori informazioni.

errore Manipolazione

la gestione degli errori di Vala è un po 'strano: di aspetto simile alle eccezioni, ma non proprio la stessa cosa. La sezione tutorial su Error Handling copre le basi abbastanza bene, e ancora una volta potrebbe essere utile leggere il glib docs on errors per ottenere una comprensione più avanzata di quello che sta succedendo dietro le quinte. Per quanto ne so, non c'è modo di ottenere una traccia dello stack dagli errori Vala - solo un tipo e un messaggio.

Best Practices

In termini di migliori pratiche, penso Vala è simile sufficiente per Java o C# che le pratiche già conoscete possono essere applicate in senso generale. Suggerisco di giocare con queste funzionalità per avere un'idea di come appaiono le specifiche in Vala. In bocca al lupo!

+0

fa Vala messaggi di supporto personalizzati per violazioni del contratto? O darà un messaggio di errore predefinito criptico? Sto cercando di trovare un buon modo per generare errori e le sezioni predefinite di "Gestione degli errori"/"Programmazione contrattuale" del tutorial di Vala non sembrano descrivere nulla di veramente utile. – weberc2

+0

Sembra che i contratti siano compilati in chiamate a g_return_if_fail(), che non supporta alcun messaggio di errore personalizzato. E hai ragione che il messaggio di errore che mostra dal codice C generato non è il più utile. Se vuoi che vengano lanciati errori personalizzati con i tuoi messaggi, Vala non ti offre zucchero sintattico: dovrai farlo alla vecchia maniera con if e throw. – chazomaticus

3

In aggiunta alla @chazomaticus grande risposta, è possibile ottenere stacktrace da Vala dal unwiding lo stack di chiamate.

E 'solo che questo non è cotto nella lingua Vala.

mi capita di avere scritto una tale libreria: ivy

ivy

1

vorrei aggiungere 2 cose da @chazomaticus risposta:

  1. Perché io non sono in grado di vedere eventuali uscite di debug/log?

    È necessario impostare la variabile di ambiente G_MESSAGES_DEBUG su all. Che è anche menzionato dalla documentazione, ma non ulteriormente spiegato. Per esempio. per debug:

    public static int main (string[] args) { 
        // Use "G_MESSAGES_DEBUG=all ./test" to print debug messages! 
    
        // Output: ``** (process:<PID>): DEBUG: <FILENAME>:<LINE>: my 10. debug message`` 
        debug ("my %d. %s", 10, "debug message"); 
        return 0; 
    } 
    
    valac --pkg glib-2.0 GLib.debug.vala 
    
    G_MESSAGES_DEBUG=all ./GLib.debug 
    
    ./GLib.debug 
    

    Se si vuole further restrict l'uscita, è possibile utilizzare error, warning, critical, message, info, debug e help invece di all.

  2. Dove è possibile trovare la documentazione per ogni funzione di registrazione?

Ulteriore lettura: