3

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

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

能够在

  • 获取描述性错误消息,告诉我错误的实际位置
  • 不会冒险破坏整个外壳

这可能吗?


我已经搜索了gnome-shellgjsrepos 以尝试找到改进错误消息的方法。我发现三个调用站点发出带有前缀的错误,但在 GJS 中Execution of main.js threw exception:找不到实际调用。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


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


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

4

1 回答 1

4

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

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

总是存在使 shell 崩溃的风险,因为如果输入错误,本机代码可能会崩溃。假设本机代码表现良好,我们的目标是防止 GJS 本身崩溃。隔离问题后,如果 GJS 似乎可以阻止某些事情,请在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");

但是,这取决于您在扩展程序中执行的操作。许多扩展修改了 GNOME Shell 的一部分,因此如果您在 GNOME Shell 之外运行,它们将无法工作。

于 2018-02-07T07:07:24.173 回答