如何诊断“启动应用程序时出错”?


26

my-app.desktop为编写的程序创建了一个文件。双击它时,出现错误消息“ 启动应用程序时出错 ”。如何获得有关问题所在的更多详细信息?

我看到了对话框的“详细信息”部分的引用,但是在我看到的对话框中没有类似的内容。如果我使用的是Mac,我将打开“控制台”应用程序以查看是否记录了任何错误,但是我还没有在Ubuntu上了解到类似的信息。

(请注意,与其他类似标题的问题不同,我不是在问这个特定的.desktop文件怎么了;我想知道一般如何查找。)


1
我只需要在终端上运行Exec行,然后查看输出说明,但是您确定桌面文件正常吗?也许您也应该从终端检查并运行它。
Jacob Vlijm 2014年

@Jacob如果有一种方法可以在stderr上添加一些有用的东西,那就是从终端运行它,这将构成对该问题的答案。
凯文·里德

1
@terdon我尝试了一下,结果发现(作为下一个问题)环境在某种程度上很重要。我想知道如何从正常的启动过程中获取更多信息,以便我不会猜测有什么不同。
凯文·里德

2
@terdon根据经验,在终端中运行它是不同的—我尝试过并且它是不同的(尤其是不同的PATH)。我想知道如何获得正常启动完全相同的环境,但具有更多诊断信息。
凯文·里德

2
有点题外话,但问题的10的9倍是Exec=路径中的特殊字符,例如空格。请记住,您应该使用Exec=引号和Path=不使用引号。
Barafu Albino

Answers:


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为此使用。欲了解更多详细信息,当看到文件的读取这里和更多的应用来做什么,看到的文件在这里


没用这种方法发现问题,但是包装器正在工作,所以我只是将包装器保留为可执行文件。
贾尼斯·埃默里斯(JānisElmeris)'18年

16

在这里找到了这个问题的答案:https : //askubuntu.com/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文件运行正常。但是,当我双击它时,它表明启动该应用程序时出错
Sayantan Koley16年

这个答案有点好笑,因为(即使我不认为它能比在Shell中运行Exec值大得多),它使我意识到TryExec密钥是我的问题。
mirh,

3

通常,终端(-输出)会为您提供有关应用程序以及桌面文件的许多有用信息。一个例子:如果我从终端运行我的应用程序,在终端中键入命令,则应用程序启动。

但是,如果出现问题,可以期望输出如下:

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=字符串之后输入的内容即可。

终端输出通常非常具体并且在错误报告中很有用,例如here


2
我知道如何使用终端以及一般如何对程序启动进行故障排除。假设采用这种方法,我需要知道的是如何在终端中准确再现.desktop启动的条件
凯文·里德


0

当我真的无法解决时,我:

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

然后右键单击创建的默认图标,并指向更好的图形。


并且在“ cd〜/ Desktop”之后应该有一个<cr>
Tom

-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

对于用户的更改而言,这不是特别可靠,但是无论如何。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.