我如何测试我的Gnome shell Extension,而不会冒撞壳的风险



在开发过程中,我引入了一个错误,导致gnome-shell尝试加载以下相当宽的错误消息时崩溃了:

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

能够在

时测试扩展
  • 获取描述性错误消息,告诉我错误的实际位置
  • 不要冒险崩溃整个外壳

这是可能的吗?


我已经搜索了gnome-shellgjs存储库,以尝试找到改善错误消息的方法。我找到了三个呼叫站点,这些呼叫网站散发出前缀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


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


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

该错误消息中的JS_EvaluateScript已过时,并不特别有用。它将在即将到来的GNOME 3.28中进行改进。

您要查找的代码(带有改进的错误消息(就在这里,您可以在设置返回到Gnome Shell的错误后立即呼叫gjs_log_exception()。您应该能够在系统期刊(sudo journalctl -xb(中找到该例外,即使在您当前版本的GNOME上也是如此。

总是有撞外壳的风险,因为如果您给出错误的输入,本机代码可能会崩溃。我们旨在防止GJS本身崩溃,假设本机代码行为良好。一旦隔离了问题,如果GJ似乎可以预防,请通过https://gitlab.gnome.org/gnome/gjs进行错误报告。

如果在导入St之前将以下代码放在文件顶部,则此问题和答案可能有助于在单独的过程中测试您的扩展名:

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

但是,这取决于您在扩展中的工作。许多扩展修改了侏儒壳的部分,因此,如果您在侏儒外壳外跑步,则它们将无法工作。

相关内容

  • 没有找到相关文章

最新更新