在开发过程中,我引入了一个错误,导致gnome-shell
尝试加载以下相当宽的错误消息时崩溃了:
Execution of main.js threw exception: JS_EvaluateScript() failed
能够在
时测试扩展- 获取描述性错误消息,告诉我错误的实际位置
- 不要冒险崩溃整个外壳
这是可能的吗?
我已经搜索了gnome-shell
和gjs
存储库,以尝试找到改善错误消息的方法。我找到了三个呼叫站点,这些呼叫网站散发出前缀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");
但是,这取决于您在扩展中的工作。许多扩展修改了侏儒壳的部分,因此,如果您在侏儒外壳外跑步,则它们将无法工作。