在开发过程中,我向扩展程序引入了一个错误,导致gnome-shell
在尝试使用以下相当广泛的错误消息加载扩展程序时崩溃:
Execution of main.js threw exception: JS_EvaluateScript() failed
能够在
时测试扩展程序会很高兴这可能吗?
我已经搜索了gnome-shell
和gjs
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
)引起的。
答案 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之外运行,那么他们就不会工作。