Comment diagnostiquer «Une erreur s'est produite lors du lancement de l'application»?


26

J'ai créé un my-app.desktopfichier pour un programme que j'ai écrit. Lorsque je double-clique dessus, j'obtiens le message d'erreur " Une erreur s'est produite lors du lancement de l'application ". Comment obtenir des informations plus détaillées sur le problème?

J'ai vu une référence à une section "détails" de la boîte de dialogue, mais il n'y a rien de semblable dans celui que je vois. Si j'étais sur mon Mac, j'ouvrirais l'application Console pour voir si des erreurs étaient enregistrées, mais je n'ai rien appris de similaire sur Ubuntu.

(Notez que contrairement à d'autres questions de même nom, je ne demande pas ce qui ne va pas avec ce fichier .desktop particulier; je veux savoir comment le découvrir en général.)


1
Je voudrais simplement exécuter la ligne Exec à partir du terminal et voir ce que la sortie vous dit, mais êtes-vous sûr que le fichier de bureau est correct? vous devriez peut-être aussi le vérifier et l'exécuter depuis le terminal.
Jacob Vlijm

@Jacob S'il existe un moyen de "l'exécuter depuis le terminal" qui met quelque chose d'utile sur stderr, cela constituerait une réponse à cette question.
Kevin Reid

1
@terdon J'ai essayé, et il s'est avéré que (comme le problème suivant ) l'environnement était différent d'une manière qui comptait. Je veux savoir comment obtenir plus d'informations du processus de lancement normal afin de ne pas deviner ce qui est différent.
Kevin Reid

2
@terdon Empiriquement, l'exécuter dans le terminal est différent - j'ai essayé et c'était différent (en particulier un différent PATH). Je veux savoir comment obtenir exactement le même environnement qu'un lancement normal mais avec plus d'informations de diagnostic.
Kevin Reid

2
Un peu hors sujet, mais 9 fois sur 10 ce problème est diffusé, ce sont des caractères spéciaux, comme des espaces, dans le Exec=chemin. N'oubliez pas, vous devriez avoir Exec=entre guillemets et Path=sans guillemets.
Barafu Albino

Réponses:


15

Voici une astuce que vous pouvez utiliser. Créez un script wrapper pour votre application qui le lancera et capturera la sortie d'erreur:

#!/usr/bin/env bash

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

Enregistrez-le sous ~/foo.shet rendez-le exécutable avec chmod +x ~/foo.sh. Maintenant, dirigez votre lanceur de bureau vers lui à la place. Quelque chose comme:

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

Cela redirigera tous les messages d'erreur vers ~/myapp.loget vous pourrez les examiner à votre guise. Vous pouvez utiliser 2>>~/myapp.logsi vous souhaitez que des messages d'erreur successifs soient ajoutés au fichier au lieu de l'écraser.


En passant, la raison pour laquelle le $PATHest différent est parce que vous définissez probablement votre $PATHdans ~/.bahsrclequel n'est pas lu par l'environnement graphique. C'est aussi une mauvaise idée car le $PATHsera défini à chaque fois que vous ouvrirez un nouveau terminal et cela est inutile. Utilisez-le ~/.profileà la place. Pour plus de détails sur quels fichiers sont lus quand voir ici et pour plus sur quel fichier doit être utilisé pour quoi, voir ici .


Je n'ai pas trouvé le problème de cette façon, mais le wrapper fonctionnait, donc j'ai juste gardé le wrapper comme exécutable.
Jānis Elmeris

16

Trouvé une réponse à cette question ici: /ubuntu//a/836842

Essaye ça :

desktop-file-validate my-app.desktop

Il génère des erreurs dans votre .desktopfichier. Par exemple, le mien est revenu:

error: first group is not "Desktrop Entry"

Donc une fois que j'ai corrigé la faute de frappe Desktop Entry, le script s'est exécuté avec succès.


7

En exécutant la commande suivante dans le terminal:

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

Je suis sûr que vous saurez s'il y a une erreur ou non dans votre commande affectée au Execchamp depuis l'intérieur de votre fichier .desktop.


5
J'ai un problème similaire. j'exécute votre commande et le fichier my.desktop fonctionne parfaitement. Mais quand je double-clique dessus, cela montre qu'il y a eu une erreur lors du lancement de l'application
Sayantan Koley

Cette réponse est assez drôle, car (même si je ne pense pas que cela fasse beaucoup plus que d'exécuter la valeur Exec dans le shell), cela m'a fait réaliser que la clé TryExec était mon problème.
mirh

3

généralement, le terminal (-output) vous donne beaucoup d'informations utiles, à la fois sur l'application et sur le fichier de bureau. Un exemple: si j'exécute mon application à partir du terminal, en tapant la commande dans le terminal, l'application démarre.

Cependant, s'il y a quelque chose qui ne va pas, vous pouvez vous attendre à une sortie comme:

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$ 

ce qui vous donne beaucoup d'informations utiles, même la ligne de votre application qui provoque l'erreur. (Je l'ai foiré exprès)

La même chose avec le fichier de bureau, ouvrez simplement un terminal dans le répertoire du fichier .desktop et faites-le glisser sur le terminal. Si vous supprimez par exemple la Exec=ligne d'un fichier .desktop, le terminal vous indiquera qu'il ne trouve pas la commande à exécuter.

Pour tester si l'application donne une erreur, exécutez simplement ce que vous mettez après la Exec=chaîne.

La sortie du terminal est généralement très spécifique et utile dans les rapports de bogues, comme ici .


2
Je sais comment utiliser un terminal et comment dépanner un lancement de programme en général. En supposant cette approche, ce que je dois savoir, c'est comment reproduire les conditions d'un lancement .desktop avec précision dans le terminal .
Kevin Reid


0

Quand je ne peux vraiment pas le comprendre, je:

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

Cliquez ensuite avec le bouton droit sur l'icône par défaut créée et pointez sur un meilleur graphique.


et il devrait y avoir un <cr> après "cd ~ / Desktop"
Tom

-1

Pour moi, le problème était une Icon=ligne manquante (ce qui semble être une exigence stupide pour un lanceur fonctionnel). Mon fichier .desktop complet ressemble maintenant à:

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

Ce qui n'est pas particulièrement robuste aux changements d'utilisateur, mais peu importe.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.