Jak zdiagnozować „Wystąpił błąd podczas uruchamiania aplikacji”?

26

Utworzyłem my-app.desktopplik do napisanego przeze mnie programu. Po dwukrotnym kliknięciu pojawia się komunikat o błędzie „ Wystąpił błąd podczas uruchamiania aplikacji ”. Jak mogę uzyskać bardziej szczegółowe informacje na temat problemu?

Widziałem odniesienie do sekcji „szczegóły” okna dialogowego, ale nic takiego nie jest obecne w tym, co widzę. Gdybym był na komputerze Mac, otworzyłbym aplikację Console, aby sprawdzić, czy jakieś błędy zostały zarejestrowane, ale nie dowiedziałem się czegoś podobnego na Ubuntu.

(Zauważ, że w przeciwieństwie do innych pytań o podobnym tytule, nie pytam, co jest nie tak z tym konkretnym plikiem .desktop; chcę wiedzieć, jak się ogólnie dowiedzieć.)

Kevin Reid
źródło
1
Chciałbym po prostu uruchomić wiersz Exec z terminala i zobaczyć, co mówi wynik, ale czy jesteś pewien, że plik na pulpicie jest w porządku? może powinieneś to sprawdzić i uruchomić również z terminala.
Jacob Vlijm
@Jacob Jeśli istnieje sposób na „uruchomienie go z terminala”, który umieszcza coś użytecznego na stderr, byłby to odpowiedź na to pytanie.
Kevin Reid
1
@terdon Próbowałem tego i okazało się, że (jako kolejny problem) środowisko było inne w sposób, który miał znaczenie. Chcę wiedzieć, jak uzyskać więcej informacji z normalnego procesu uruchamiania, aby nie zgadywać, co jest inne.
Kevin Reid
2
@terdon Empirycznie, uruchamianie go w terminalu jest inne - próbowałem i było inaczej (w szczególności inne PATH). Chcę wiedzieć, jak uzyskać dokładnie takie samo środowisko jak normalne uruchomienie, ale z większą ilością informacji diagnostycznych.
Kevin Reid
2
Trochę nie na temat, ale 9 razy na 10, że problem sprawia, że ​​to znaki specjalne, takie jak spacje, na Exec=ścieżce. Pamiętaj, że powinieneś mieć Exec=w cudzysłowie i Path=bez cudzysłowów.
Barafu Albino

Odpowiedzi:

15

Oto sztuczka, której możesz użyć. Utwórz skrypt opakowania dla swojej aplikacji, która go uruchomi, i przechwyć dane wyjściowe błędu:

#!/usr/bin/env bash

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

Zapisz to jako ~/foo.shi zrób to za pomocą chmod +x ~/foo.sh. Teraz zamiast tego skieruj na nią program uruchamiający pulpit. Coś jak:

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

Spowoduje to przekierowanie komunikatów o błędach ~/myapp.logi możesz je sprawdzić w dowolnym momencie. Możesz użyć, 2>>~/myapp.logjeśli chcesz, aby kolejne pliki błędów były dołączane do pliku zamiast go zastępować.


Nawiasem mówiąc, powodem tego $PATHjest to, że prawdopodobnie ustawiasz swoje, $PATHw ~/.bahsrcktórych środowisko graficzne nie odczytuje. Jest to również zły pomysł, ponieważ $PATHzostanie ustawiony za każdym razem, gdy otwierasz nowy terminal, co jest niepotrzebne narzutem. ~/.profileZamiast tego użyj do tego. Aby uzyskać więcej informacji o tym, które pliki są odczytywane, zobacz tutaj, a więcej informacji o tym, który plik należy użyć do tego, zobacz tutaj .

terdon
źródło
Nie znalazłem problemu w ten sposób, ale opakowanie działało, więc po prostu zostawiłem opakowanie jako plik wykonywalny.
Jānis Elmeris
16

Odpowiedź na to pytanie znajduje się tutaj: /ubuntu//a/836842

Spróbuj tego :

desktop-file-validate my-app.desktop

Wyświetla błędy w twoim .desktoppliku. Na przykład mój zwrócił:

error: first group is not "Desktrop Entry"

Więc kiedy poprawiłem literówkę Desktop Entry, skrypt działał pomyślnie.

Jimmy
źródło
7

Uruchamiając następujące polecenie w terminalu:

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

Jestem pewien, że dowiesz się, czy w poleceniu przypisanym do Execpola występuje błąd z wnętrza pliku .desktop.

Radu Rădeanu
źródło
5
Mam podobny problem. wykonuję twoje polecenie, a plik my.desktop działa idealnie. Ale po dwukrotnym kliknięciu pokazuje błąd Wystąpił błąd podczas uruchamiania aplikacji
Sayantan Koley
Ta odpowiedź jest dość zabawna, ponieważ (choć nie sądzę, że robi coś więcej niż uruchamianie wartości Exec w powłoce), uświadomiłem sobie, że mój klucz to klucz TryExec .
mirh
3

zwykle terminal (-output) daje wiele użytecznych informacji, zarówno o aplikacji, jak i pliku na pulpicie. Przykład: jeśli uruchomię aplikację z terminala, wpisując polecenie w terminalu, aplikacja zostanie uruchomiona.

Jeśli jednak coś jest nie tak, możesz spodziewać się wyniku takiego jak:

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$ 

co daje wiele przydatnych informacji, nawet wiersz w aplikacji, który powoduje błąd. (Celowo to pomieszałem)

To samo z plikiem pulpitu, wystarczy otworzyć terminal w katalogu pliku .desktop i przeciągnąć go do terminala. Jeśli na przykład usuniesz Exec=wiersz z pliku .desktop, terminal poinformuje cię, że nie może znaleźć polecenia do wykonania.

Aby sprawdzić, czy aplikacja wyświetla błąd, po prostu uruchom to, co umieściłeś po Exec=ciągu.

Dane wyjściowe terminala są zwykle bardzo specyficzne i przydatne w raportach błędów, jak tutaj .

Jacob Vlijm
źródło
2
Wiem o tym, jak korzystać z terminala i jak ogólnie rozwiązywać problemy z uruchomieniem programu. Zakładając to podejście, muszę wiedzieć, jak dokładnie odtworzyć warunki uruchomienia .desktop w terminalu .
Kevin Reid
0

Kiedy naprawdę nie mogę tego rozgryźć, ja:

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

Następnie kliknij prawym przyciskiem myszy utworzoną domyślną ikonę i wskaż lepszą grafikę.

Tomek
źródło
i po „cd ~ / Desktop” powinien pojawić się <cr>
Tom
-1

Dla mnie problemem był brak Icon=linii (co wydaje się głupim wymogiem dla działającego programu uruchamiającego). Mój pełny plik .desktop wygląda teraz:

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

Co nie jest szczególnie odporne na zmiany w użytkowniku, ale cokolwiek.

tsbertalan
źródło