Как мне диагностировать «Произошла ошибка при запуске приложения»?

26

Я создал my-app.desktopфайл для программы, которую написал. Когда я дважды щелкаю по нему, я получаю сообщение об ошибке « Произошла ошибка при запуске приложения ». Как я могу получить более подробную информацию о том, в чем проблема?

Я видел ссылку на раздел «детали» диалогового окна, но в том, что я вижу, нет ничего подобного. Если бы я был на своем Mac, я бы открыл консольное приложение, чтобы посмотреть, не были ли зарегистрированы какие-либо ошибки, но я не узнал ничего подобного в Ubuntu.

(Обратите внимание, что в отличие от других вопросов с аналогичным названием, я не спрашиваю, что не так с этим конкретным файлом .desktop; я хочу знать, как это выяснить в целом.)

Кевин Рид
источник
1
Я просто запустил бы строку Exec из терминала и посмотрел бы, что говорит вывод, но вы уверены, что файл рабочего стола в порядке? возможно, вам следует проверить и запустить его из терминала.
Джейкоб Влейм
@Jacob Если есть способ «запустить его из терминала», который помещает что-то полезное в stderr, это будет ответом на этот вопрос.
Кевин Рейд
1
@terdon Я попробовал это, и оказалось, что (как следующая проблема) среда отличалась таким образом, что имело значение. Я хочу знать, как получить больше информации из обычного процесса запуска, чтобы не гадать, в чем дело.
Кевин Рейд,
2
@terdon Эмпирически, запуск его в терминале отличается - я пытался, и он был другим (в частности, другой PATH). Я хочу знать, как получить точно такую ​​же среду, как при обычном запуске, но с большей диагностической информацией.
Кевин Рейд
2
Немного оффтоп, но 9 раз из 10, что проблема выдает это специальные символы, как пробелы, в Exec=пути. Помните, вы должны иметь Exec=в кавычках и Path=без кавычек.
Барафу Альбино

Ответы:

15

Вот трюк, который вы можете использовать. Создайте скрипт-обертку для вашего приложения, которое запустит его и сохранит вывод ошибки:

#!/usr/bin/env bash

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

Сохраните это как ~/foo.shи сделайте его исполняемым с chmod +x ~/foo.sh. Теперь вместо этого укажите на него панель запуска вашего рабочего стола. Что-то типа:

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

Это перенаправит любые сообщения об ошибках, ~/myapp.logи вы можете просмотреть их на досуге. Вы можете использовать, 2>>~/myapp.logесли хотите, чтобы последовательные сообщения об ошибках добавлялись в файл, а не перезаписывали его.


Как и в стороне, причина того, что $PATHотличается, потому что вы, вероятно , настройками вашего $PATHин , ~/.bahsrcкоторый не прочитан в графической среде. Это также плохая идея, поскольку $PATHона будет устанавливаться каждый раз, когда вы открываете новый терминал, и это не требует лишних затрат. Используйте ~/.profileдля этого вместо этого. Подробнее о том, какие файлы читаются, смотрите здесь, а о том, какой файл для чего следует использовать, смотрите здесь .

terdon
источник
Не нашел проблему таким образом, но оболочка работала, поэтому я просто сохранил оболочку как исполняемый файл.
Янис Элмерис
16

Нашел ответ на этот вопрос здесь: /ubuntu//a/836842

Попробуй это :

desktop-file-validate my-app.desktop

Он выводит ошибки в вашем .desktopфайле. Например мой вернулся:

error: first group is not "Desktrop Entry"

Поэтому, как только я исправил опечатку Desktop Entry, скрипт успешно запустился.

Джимми
источник
7

Запустив следующую команду в терминале:

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

Я уверен, что вы узнаете, есть ли ошибка в вашей команде, назначенной Execполю изнутри вашего файла .desktop.

Раду Рэдяну
источник
5
У меня похожая проблема. я выполняю вашу команду и файл my.desktop работает отлично. Но когда я дважды
щелкаю по
Этот ответ довольно забавный, поскольку (хотя я не думаю, что он делает что-то большее, чем запуск значения Exec в оболочке), он заставил меня понять, что ключ TryExec был моей проблемой.
Mirh
3

обычно терминал (-output) дает вам много полезной информации, как о приложении, так и о файле рабочего стола. Пример: если я запускаю свое приложение из терминала, набирая команду в терминале, приложение запускается.

Однако, если что-то не так, вы можете ожидать такой вывод:

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$ 

которая дает вам много полезной информации, даже строку в вашем приложении, которая вызывает ошибку. (Я испортил это нарочно)

То же самое с файлом рабочего стола, просто откройте терминал в каталоге файла .desktop и перетащите его на терминал. Например, если вы удалите Exec=строку из файла .desktop, терминал сообщит вам, что не может найти команду для выполнения.

Чтобы проверить, дает ли приложение ошибку, просто запустите то, что вы поставили после Exec=строки.

Вывод терминала обычно очень специфичен и полезен в отчетах об ошибках, как здесь .

Якоб Влейм
источник
2
Я знаю о том, как использовать терминал и как устранить неполадки при запуске программы в целом. Предполагая такой подход, мне нужно знать, как точно воспроизвести условия запуска .desktop в терминале .
Кевин Рейд
0

Когда я действительно не могу понять это, я:

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

Затем щелкните правой кнопкой мыши на значке по умолчанию, который создан, и укажите на лучший рисунок.

Том
источник
и должно быть <cr> после "cd ~ / Desktop"
Том
-1

Для меня проблема была в пропущенной Icon=строке (что выглядит как глупое требование для работающей программы запуска). Мой полный файл .desktop теперь выглядит так:

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

Который не особенно устойчив к изменениям в пользователе, но что угодно.

tsbertalan
источник