如何在没有崩溃shell风险的情况下测试我的GNOME Shell扩展?

时间:2018-02-06 13:41:00

标签: gnome-shell gnome-shell-extensions gjs

在开发过程中,我向扩展程序引入了一个错误,导致gnome-shell在尝试使用以下相当广泛的错误消息加载扩展程序时崩溃:

Execution of main.js threw exception: JS_EvaluateScript() failed

能够在

时测试扩展程序会很高兴
  • 获取描述性错误消息,告诉我错误的实际位置
  • 没有冒险使整个炮弹崩溃

这可能吗?

我已经搜索了gnome-shellgjs repos,试图找到改进错误消息的方法。我发现有三个呼叫网站发出前缀为Execution of main.js threw exception:的错误,但我无法在GJS中找到JS_EvaluateScript的实际呼叫。

我还尝试使用gjs运行我的扩展程序:

gjs -I /usr/lib/gnome-shell extension.js

gjs抱怨

Typelib file for namespace 'St' (any version) not found @extension.js:3:7

虽然St-1.0.typelib确实位于/usr/lib/gnome-shell

我知道我可以使用LookingGlass来评估一些JS字符串。

我知道错误是由使用无效参数调用本机代码(St)引起的。

1 个答案:

答案 0 :(得分:3)

该错误消息中的JS_EvaluateScript已过时,并不是特别有帮助。它将在即将推出的GNOME 3.28中得到改进。

您正在寻找的代码(带有改进的错误消息)是here,您可以看到在设置返回给GNOME Shell的错误后立即调用gjs_log_exception()。您应该能够在系统日志(sudo journalctl -xb)中找到该异常,即使在当前版本的GNOME上也是如此。

总是存在崩溃shell的风险,因为如果输入错误,本机代码可能会崩溃。我们的目标是防止GJS本身崩溃,假设本机代码表现良好。一旦你发现了问题,如果看起来像是GJS可以阻止的,请在https://gitlab.gnome.org/GNOME/gjs处制作一份错误报告。

如果您在导入St之前将以下代码放在文件顶部,

This question and answer可能有助于在单独的流程中测试您的扩展程序:

const GIRepository = imports.gi.GIRepository;
GIRepository.Repository.prepend_search_path("/usr/lib/gnome-shell");
GIRepository.Repository.prepend_library_path("/usr/lib/gnome-shell");

但是,这取决于您在扩展程序中的操作。许多扩展修改了GNOME Shell的部分,因此如果你在GNOME Shell之外运行,那么他们就不会工作。

相关问题