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ć.)


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 .


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.


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.


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 .


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ę.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.