2011-12-08 28 views
46

Mi piacerebbe sviluppare le estensioni della shell GNOME e ho scoperto che è davvero facile entrare nel processo di sviluppo, ma non riesco ancora a capire come eseguire il debug/test delle mie estensioni in modo efficace.Come testare/eseguire il debug delle estensioni della shell GNOME? C'è qualche strumento per questo?

Esistono strumenti per questo scopo? C'è qualche tipo di console in tempo reale come quella che abbiamo nei moderni browser o ambienti server javascript?

risposta

42

Sì, la console in tempo reale si chiama "Looking Glass" e può essere avviato premendo Alt + F2 e digitando lg al prompt.

Maggiori informazioni: https://live.gnome.org/GnomeShell/LookingGlass

+0

Solo un piccolo dubbio sul lookGlass: ho incluso 'global.log ('hello world');' all'interno di un loop nella mia estensione ma nulla è stato registrato nella console. Le estensioni non possono registrare i messaggi in modo programmatico? – marcio

+0

Ho già la risposta. Registra correttamente ma è necessario ricaricare l'ambiente della shell gnome dopo qualsiasi aggiornamento negli script (Alt + F2 e digitare 'r'). – marcio

+0

Sai perchè lg non sta funzionando da riga di comando ?? !!! funziona con alt + f2 ma non dal terminale! –

16

Looking Glass è grande. Se hai bisogno di una console diritta, però, puoi ottenerne una, ma non tramite LG, almeno non dal 3.6.

Se si apre un terminale e si digita gnome-shell --replace, gnome-shell verrà eseguito da lì, sostituendo l'istanza in esecuzione e l'output del registro globale verrà successivamente visualizzato in tale console.

È possibile verificare con Looking Glass facendo Alt - F2lg, e poi global.log("foo") nella scheda "Valutatore".

+0

+1 questa è una grande informazione, ho utilizzato anche questo metodo – marcio

+1

Quando ho annullato gnome-shell dopo aver usato l'approccio, tutto si bloccava eccetto per il mio mouse Ho dovuto riavviare la mia macchina per farlo funzionare di nuovo. – EndangeredMassa

+0

Questo perché hai ucciso la tua unica istanza di gnome-shell. Invece di ucciderlo con 'C-c' quando hai finito, premi' C-z' per sospenderlo. Quindi digita 'bg ' nella console (potresti non vedere cosa stai scrivendo quando digiti questo comando) e poi gnome-shell verrà eseguito in background.Successivamente, esegui 'disown ' per staccare il processo dalla finestra del terminale, dopo di che puoi chiudere in sicurezza la finestra del terminale. –

7

Preferisco leggere i file ~/.xsession-errors e ~/.cache/gdm/session.log per ulteriori dettagli. Alcuni dei messaggi di errore potrebbero avere una relazione con altre eccezioni o errori.

+7

@ User231371 vorrebbe sottolineare: In Ubuntu gnome, i log sono in ~/.cache/upstart/gnome-session.log. –

3

Anjuta Dev-Studio è un ottimo strumento per lavorare con le estensioni gnome-shell; viene fornito con un debugger, un designer della GUI, il controllo della versione e altro ancora. C'è anche un tutorial guidato per l'utilizzo di Anjuta con l'estensione gnome-shell progetti sopra su di gnome wiki-pages

28

su Fedora 20 (e probabilmente qualsiasi nuovo linux distro) è possibile utilizzare il comando:

journalctl /usr/bin/gnome-session -f -o cat 

costantemente (-f) stampa gli errori generati da gnome-session nella finestra del terminale. Preferisco il flag -o cat perché mostra i messaggi completi senza timestap.

su Fedora 22, io credo, è stato sostituito con:

journalctl /usr/bin/gnome-shell -f -o cat 
+2

Questo è molto meglio di 'gnome-shell --replace' poiché id non associa una sessione di shell gnome ad un terminale :) – marcio

+0

Anche su ubuntu wokrs –

3

Non posso commentare su altre risposte ancora, così ho pensato di aggiungere - per quanto in ritardo, può essere:

  • Per il commento 2 della risposta di Geoff, è sufficiente riavviare la shell tramite alt+f2 - quindi r e enter, quando ciò accade - la sessione di terminale termina automaticamente (almeno su Debian).

  • Suggerirei la risposta di jsnjack per il debug generale, che funziona anche con Debian Jessy; probabilmente voglio sudo che però. Mostrerà gli errori di gnome, così come i messaggi global.log() in qualunque terminale tu lo installi.

Se non altro, questo fornisce un riferimento più completo per me - come ho incontrato questa pagina più di una volta quando si fa riferimento informazioni non tengo fresca nella mia memoria.

1

Le altre risposte non hanno funzionato per me mentre sviluppavo la mia estensione. Che cosa ha fatto, tuttavia, era:

journalctl /usr/lib/gnome-session/gnome-session-binary -f -o cat 

Se si vuole declutter l'uscita di vedere solo la vostra applicazione, è possibile utilizzare:

journalctl /usr/lib/gnome-session/gnome-session-binary -f -o cat | grep [myAppId] 

Se anche voi volete accedere ai registri non errore utilizzando il metodo di cui sopra sopra è possibile utilizzare:

global.log('[myAppId]', valueToLog); 

Se non si conosce il percorso corretto per la sessione GNOME è anche possibile utilizzare:

journalctl -f | grep gnome-session 

Il motivo per cui non funzionava è probabilmente dovuto al fatto che il percorso di gnome-session-binary era diverso, che potrebbe essere correlato a una versione più recente di gnome installata.

+0

Su Fedora 26, il percorso corretto è'/etc/libexec/gnome -session-binary'. – akaihola

+0

Tuttavia, i messaggi 'global.log()' non vengono visualizzati nell'output 'journalctl', né in Looking Glass. La registrazione è forse disattivata per impostazione predefinita su Fedora 26? – akaihola

+0

Invece, i messaggi di registro * do * vengono visualizzati in 'journalctl/usr/bin/gnome-shell'. – akaihola

1

stiamo sviluppando un pacchetto di emacs volto a gnome-shell sviluppo di estensioni qui: https://github.com/paperwm/gnome-shell-mode

E 'ancora in "beta" (dicembre 2017)., Ma la sua già molto utile.

Caratteristiche

  • Autocompletion (muuuch meglio di quello specchio fornisce)
  • Eval di linea, selezione, funzione corrente, tampone (opzionalmente incollando il risultato nel buffer in un commento)
  • Evidenziamento dell'errore durante la valutazione
  • Assistente ricerca documenti
  • Assistente per ricaricare il modulo su cui stai lavorando ut restarting gnome-shell