Wie stelle ich fest, dass beim Starten der Anwendung ein Fehler aufgetreten ist?

26

Ich habe eine my-app.desktopDatei für ein Programm erstellt, das ich geschrieben habe. Wenn ich darauf doppelklicke, erhalte ich die Fehlermeldung "Beim Starten der Anwendung ist ein Fehler aufgetreten ". Wie kann ich genauere Informationen zum Problem erhalten?

Ich habe einen Verweis auf einen "Detail" -Abschnitt des Dialogfelds gesehen, aber in dem, den ich sehe, ist nichts Ähnliches vorhanden. Wenn ich auf meinem Mac wäre, würde ich die Konsolen-App öffnen, um festzustellen, ob Fehler protokolliert wurden, aber ich habe noch nichts Ähnliches unter Ubuntu erfahren.

(Beachten Sie, dass ich im Gegensatz zu anderen Fragen mit ähnlichen Titeln nicht frage, was mit dieser bestimmten .desktop-Datei nicht stimmt. Ich möchte wissen, wie ich das im Allgemeinen herausfinden kann.)

Kevin Reid
quelle
1
Ich würde einfach die Exec-Zeile vom Terminal ausführen und sehen, was die Ausgabe Ihnen sagt, aber sind Sie sicher, dass die Desktop-Datei in Ordnung ist? Vielleicht sollten Sie es auch vom Terminal aus überprüfen und ausführen.
Jacob Vlijm
@Jacob Wenn es eine Möglichkeit gibt, "vom Terminal aus zu starten", die stderr etwas Nützliches einräumt, wäre dies eine Antwort auf diese Frage.
Kevin Reid
1
@terdon Ich habe das ausprobiert, und es stellte sich heraus, dass (als nächstes Problem) die Umgebung in einer Weise anders war, die wichtig war. Ich möchte wissen, wie ich mehr Informationen aus dem normalen Startprozess herausholen kann, damit ich nicht errate, was anders ist.
Kevin Reid
2
@terdon Empirisch ist die Ausführung im Terminal anders - ich habe es versucht und es war anders (insbesondere anders PATH). Ich möchte wissen, wie ich genau die gleiche Umgebung wie bei einem normalen Start erhalten kann, aber mit mehr Diagnoseinformationen.
Kevin Reid
2
Ein bisschen offtopic, aber 9 Mal von 10, die das Problem ausstrahlen, sind Sonderzeichen, wie Leerzeichen, im Exec=Pfad. Denken Sie daran, Sie sollten Exec=in Anführungszeichen und Path=ohne Anführungszeichen haben.
Barafu Albino

Antworten:

15

Hier ist ein Trick, den Sie verwenden können. Erstellen Sie ein Wrapper-Skript für Ihre Anwendung, um es zu starten und die Fehlerausgabe zu erfassen:

#!/usr/bin/env bash

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

Speichern Sie das als ~/foo.shund machen Sie es ausführbar mit chmod +x ~/foo.sh. Zeigen Sie stattdessen mit Ihrem Desktop-Launcher darauf. So etwas wie:

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

Dadurch werden alle Fehlermeldungen an umgeleitet ~/myapp.logund Sie können sie nach Belieben überprüfen. Sie können verwenden, 2>>~/myapp.logwenn aufeinanderfolgende Fehlermeldungen an die Datei angehängt werden sollen, anstatt sie zu überschreiben.


Abgesehen davon liegt der Grund dafür, dass das $PATHanders ist, darin, dass Sie wahrscheinlich festlegen, $PATHin ~/.bahsrcwelchem ​​Format von der grafischen Umgebung nicht gelesen wird. Es ist auch eine schlechte Idee, da das $PATHjedes Mal gesetzt wird, wenn Sie ein neues Terminal öffnen, und das ist unnötiger Overhead. Verwenden Sie ~/.profiledafür stattdessen. Weitere Informationen dazu, welche Dateien wann gelesen werden, finden Sie hier und welche Datei für welche Zwecke verwendet werden soll, finden Sie hier .

terdon
quelle
Ich habe das Problem nicht auf diese Weise gefunden, aber der Wrapper funktionierte, also habe ich den Wrapper einfach als ausführbare Datei beibehalten.
Jānis Elmeris
16

Hier finden Sie eine Antwort auf diese Frage: https://askubuntu.com/a/836842

Versuche dies :

desktop-file-validate my-app.desktop

Es gibt Fehler in Ihrer .desktopDatei aus. Zum Beispiel meins zurückgegeben:

error: first group is not "Desktrop Entry"

Nachdem ich den Tippfehler auf korrigiert hatte, Desktop Entrywurde das Skript erfolgreich ausgeführt.

Jimmy
quelle
7

Führen Sie im Terminal den folgenden Befehl aus:

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

Ich bin sicher, dass Sie Execaus Ihrer .desktop-Datei herausfinden werden, ob in Ihrem Befehl, der dem Feld zugewiesen ist, ein Fehler vorliegt oder nicht .

Radu Rădeanu
quelle
5
Ich habe ein ähnliches Problem. Ich führe deinen Befehl aus und meine.desktop-Datei funktioniert perfekt. Aber wenn ich darauf
doppelklicke, wird angezeigt, dass
Diese Antwort ist irgendwie witzig, da mir (obwohl ich nicht glaube, dass sie mehr bewirkt als Exec- Werte in der Shell auszuführen ) klar wurde, dass der TryExec- Schlüssel mein Problem war.
Mirh
3

In der Regel enthält das Terminal (-output) viele nützliche Informationen sowohl zur Anwendung als auch zur Desktop-Datei. Ein Beispiel: Wenn ich meine Anwendung über das Terminal ausführe und den Befehl im Terminal eingebe, wird die Anwendung gestartet.

Wenn jedoch etwas nicht stimmt, können Sie eine Ausgabe erwarten wie:

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$ 

Dadurch erhalten Sie viele nützliche Informationen, auch die Zeile in Ihrer Anwendung, die den Fehler verursacht. (Ich habe es absichtlich vermasselt)

Das Gleiche gilt für die Desktop-Datei. Öffnen Sie einfach ein Terminal im Verzeichnis der .desktop-Datei und ziehen Sie es auf das Terminal. Wenn Sie beispielsweise die Exec=Zeile aus einer .desktop-Datei entfernen , werden Sie vom Terminal darauf hingewiesen, dass der auszuführende Befehl nicht gefunden werden kann.

Um zu testen, ob die Anwendung einen Fehler ausgibt, führen Sie einfach das aus, was Sie nach der Exec=Zeichenfolge eingegeben haben.

Die Terminal-Ausgabe ist normalerweise sehr spezifisch und nützlich in Fehlerberichten wie hier .

Jacob Vlijm
quelle
2
Ich weiß, wie man ein Terminal benutzt und wie man Probleme beim Programmstart im Allgemeinen behebt. Unter der Annahme dieses Ansatzes muss ich wissen, wie die Bedingungen eines Desktop-Starts im Terminal genau reproduziert werden .
Kevin Reid
0

Wenn ich es wirklich nicht herausfinden kann, habe ich:

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

Klicken Sie dann mit der rechten Maustaste auf das erstellte Standardsymbol und zeigen Sie auf eine bessere Grafik.

Tom
quelle
und es sollte ein <cr> nach "cd ~ / Desktop" geben
Tom
-1

Für mich war das Problem eine fehlende Icon=Zeile (was für einen funktionierenden Launcher eine blöde Voraussetzung zu sein scheint). Meine vollständige .desktop-Datei sieht jetzt folgendermaßen aus:

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

Welches ist nicht besonders robust gegenüber Änderungen im Benutzer, aber was auch immer.

tsbertalan
quelle