当前位置: 首页>>技术教程>>正文


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

,

问题描述

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

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

(请注意,与其他 similarly-titled 问题不同,我不是在问这个特定的 .desktop 文件有什么问题;我想知道一般情况下如何找出答案。)

最佳方案

在这里找到了这个问题的答案:https://askubuntu.com/a/836842

尝试这个 :

desktop-file-validate my-app.desktop

它在您的 .desktop 文件中输出错误。例如我的返回:

error: first group is not "Desktrop Entry"

因此,一旦我将拼写错误更正为 Desktop Entry ,脚本就成功运行了。

次佳方案

这是您可以使用的技巧。为您的应用程序创建一个包装器脚本,它将启动它并捕获错误输出:

#!/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 不同的原因是因为您可能在 ~/.bahsrc 中设置了 $PATH,图形环境无法读取它。这也是一个坏主意,因为每次打开新终端时都会设置 $PATH,这是不必要的开销。为此使用 ~/.profile。有关何时读取哪些文件的更多详细信息,请参阅 here 以及有关应将哪个文件用于什么目的的更多信息,请参阅 here

第三种方案

通过在终端中运行以下命令:

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

我相信您会发现从 .desktop 文件内部分配给 Exec 字段的命令是否有错误。

第四种方案

通常,终端(输出)会为您提供很多有用的信息,包括应用程序和桌面文件。一个例子:\n如果我从终端运行我的应用程序,在终端中输入命令,应用程序就会启动。

但是,如果出现问题,您会得到如下输出:

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 文件的目录中打开一个终端并将其拖到终端上即可。例如,如果您从 .desktop 文件中删除 Exec= 行,终端将告诉您它找不到要执行的命令。

要测试应用程序是否出错,只需运行您在 Exec= 字符串之后放置的内容。

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13603.html,未经允许,请勿转载。