Як діагностувати "Під час запуску програми сталася помилка?"


26

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

Я побачив посилання на розділ "деталі" діалогового вікна, але в тому, що я бачу, немає нічого подібного. Якби я був на своєму Mac, я б відкрив додаток Console, щоб побачити, чи були введені якісь помилки, але я нічого не дізнався про щось подібне на 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для цього замість цього. Детальніше про те, які файли читаються, коли дивіться тут, а також докладніше про те, який файл слід використовувати для чого, дивіться тут .


Не знайшли проблему таким чином, але обгортка працювала, тому я просто зберігав обгортку як виконуваний файл.
Яніс Елмеріс

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> після того, як «кд ~ / 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

Що не особливо надійно до змін у користувачеві, але все одно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.