Come faccio a diagnosticare "Si è verificato un errore durante l'avvio dell'applicazione"?


26

Ho creato un my-app.desktopfile per un programma che ho scritto. Quando faccio doppio clic su di esso, viene visualizzato il messaggio di errore " Errore durante l'avvio dell'applicazione ". Come posso ottenere informazioni più dettagliate su quale sia il problema?

Ho visto un riferimento a una sezione "dettagli" della finestra di dialogo, ma non c'è nulla di simile a quello presente in quello che vedo. Se fossi sul mio Mac, aprirei l'app Console per vedere se sono stati registrati errori, ma non ho imparato nulla di simile su Ubuntu.

(Nota che a differenza di altre domande con titoli simili, non sto chiedendo cosa c'è che non va in questo particolare file .desktop; voglio sapere come scoprirlo in generale.)


1
Vorrei solo eseguire la linea Exec dal terminale e vedere cosa ti dice l'output, ma sei sicuro che il file desktop sia ok? forse dovresti controllare ed eseguirlo anche dal terminale.
Jacob Vlijm,

@Jacob Se c'è un modo per "eseguirlo dal terminale" che mette qualcosa di utile su stderr, ciò costituirebbe una risposta a questa domanda.
Kevin Reid,

1
@terdon L'ho provato, e si è scoperto che (come il prossimo problema) l'ambiente era diverso in un modo che contava. Voglio sapere come ottenere maggiori informazioni dal normale processo di avvio in modo da non indovinare cosa sia diverso.
Kevin Reid,

2
@terdon Empiricamente, eseguirlo nel terminale è diverso - ho provato ed era diverso (in particolare un diverso PATH). Voglio sapere come ottenere esattamente lo stesso ambiente di un normale lancio ma con più informazioni diagnostiche.
Kevin Reid,

2
Un po 'offtopico, ma 9 volte su 10 quel problema va in onda sono personaggi speciali, come spazi, nel Exec=percorso. Ricorda, dovresti avere Exec=tra virgolette e Path=senza virgolette.
Barafu Albino,

Risposte:


15

Ecco un trucco che puoi usare. Crea uno script wrapper per la tua applicazione che lo avvierà e acquisirà l'output dell'errore:

#!/usr/bin/env bash

## Launch 'yourapp' and capture its standard error output
/path/to/yourapp 2>~/myapp.log

Salvalo come ~/foo.she rendilo eseguibile con chmod +x ~/foo.sh. Adesso punta invece sul desktop launcher. Qualcosa di simile a:

[Desktop Entry]
Version=2.0
Type=Application
Exec=/home/kevin/foo.sh
Terminal=true
Comment=My app!

Ciò reindirizzerà tutti i messaggi di errore ~/myapp.loge potrai esaminarli a tuo piacimento. È possibile utilizzare 2>>~/myapp.logse si desidera aggiungere messaggi di errore successivi al file anziché sovrascriverlo.


A parte questo, il motivo per cui $PATHè diverso è perché probabilmente stai impostando il tuo $PATHin ~/.bahsrccui non viene letto dall'ambiente grafico. È anche una cattiva idea poiché $PATHverrà impostato ogni volta che si apre un nuovo terminale e questo è inutile sovraccarico. Utilizzare ~/.profileper questo invece. Per maggiori dettagli su quali file vengono letti quando vengono visualizzati qui e per ulteriori informazioni su quali file devono essere utilizzati per cosa, vedere qui .


Non ho riscontrato il problema in questo modo, ma il wrapper funzionava, quindi ho mantenuto il wrapper come eseguibile.
Jānis Elmeris,

16

Hai trovato una risposta a questa domanda qui: /ubuntu//a/836842

Prova questo :

desktop-file-validate my-app.desktop

Emette errori nel tuo .desktopfile. Ad esempio il mio è tornato:

error: first group is not "Desktrop Entry"

Quindi, una volta corretto l'errore di battitura Desktop Entry, lo script è stato eseguito correttamente.


7

Eseguendo il seguente comando nel terminale:

awk -F= '/Exec=/{system($2)}' your_desktop_file.desktop

Sono sicuro che scoprirai se c'è un errore nel tuo comando assegnato al Execcampo dall'interno del tuo file .desktop.


5
Ho un problema simile eseguo il tuo comando e il file my.desktop funziona perfettamente. Ma quando faccio doppio clic su di esso, viene visualizzato il messaggio Errore nell'avvio dell'applicazione
Sayantan Koley,

Questa risposta è in qualche modo divertente, poiché (anche se non penso che lo faccia molto di più dell'esecuzione del valore Exec nella shell) mi ha fatto capire che la chiave TryExec era il mio problema.
mirh

3

di solito, il terminale (-output) fornisce molte informazioni utili, sia sull'applicazione che sul file desktop. Un esempio: se eseguo la mia applicazione dal terminale, digitando il comando nel terminale, l'applicazione si avvia.

Tuttavia, se c'è qualcosa di sbagliato, puoi aspettarti un output come:

Traceback (most recent call last):
  File "/home/jacob/Bureaublad/werkmap_2.0/uploaded_versions/2.1.2/32_en_ppa    /qle-2.1.2/code/qle_quicklisteditor", line 4044, in <module>
    MainWindow()
  File "/home/jacob/Bureaublad/werkmap_2.0/uploaded_versions/2.1.2/32_en_ppa   /qle-2.1.2/code/qle_quicklisteditor", line 51, in __init__
    self.load_sectons()
AttributeError: 'MainWindow' object has no attribute 'load_sectons'
jacob@Jacobwerkkamer:~/Bureaublad/werkmap_2.0/uploaded_versions/2.1.2/32_en_ppa   /qle-2.1.2/code$ 

che ti fornisce molte informazioni utili, anche la riga nella tua applicazione che causa l'errore. (L'ho incasinato apposta)

Lo stesso con il file desktop, basta aprire un terminale nella directory del file .desktop e trascinarlo sul terminale. Se ad esempio rimuovi la Exec=linea da un file .desktop, il terminale ti dirà che non riesce a trovare il comando da eseguire.

Per verificare se l'applicazione fornisce un errore, esegui semplicemente ciò che hai inserito dopo la Exec=stringa.

L'output del terminale è in genere molto specifico e utile nelle segnalazioni di bug, come qui .


2
So come utilizzare un terminale e come risolvere i problemi di avvio di un programma in generale. Supponendo questo approccio, quello che devo sapere è come riprodurre accuratamente le condizioni di un lancio di .desktop nel terminale .
Kevin Reid,


0

Quando non riesco davvero a capirlo, io:

cd ~/Desktop
ln -s /my/binary/thatIwanttorun mybinary

Quindi fare clic con il tasto destro sull'icona predefinita creata e scegliere un grafico migliore.


e ci dovrebbe essere un <cr> dopo "cd ~ / Desktop"
Tom

-1

Per me, il problema era una Icon=linea mancante (che sembra uno stupido requisito per un lanciatore funzionante). Il mio file .desktop completo ora assomiglia a:

[Desktop Entry]
Name=LiClipse
Comment=Variant of Eclipse
Exec=/home/tsbertalan/bin/liclipse
Terminal=true
Type=Application
Icon=/home/tsbertalan/usr/liclipse/icon.xpm

Che non è particolarmente robusto per i cambiamenti dell'utente, ma comunque.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.