我如何测试我的 GNOME Shell 扩展而不会有崩溃 shell 的风险?
How can I test my GNOME Shell extension without risk of crashing the shell?
在开发过程中,我在我的扩展程序中引入了一个错误,导致 gnome-shell
在尝试加载扩展程序时崩溃,并显示以下措辞相当宽泛的错误消息:
Execution of main.js threw exception: JS_EvaluateScript() failed
能够在
时测试一个扩展就好了
- 获取描述性错误消息,告诉我错误的实际位置
- 不要冒险让整个系统崩溃 shell
这可能吗?
我已经搜索了 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
我知道我可以使用 LookingGlass 来评估一些 JS 字符串。
我知道错误是由于使用无效参数调用本机代码 (St
) 引起的。
该错误消息中的 JS_EvaluateScript
已过时,并且不是特别有用。它将在即将推出的 GNOME 3.28 中得到改进。
您正在寻找的代码(带有改进的错误消息)是 here,您可以看到在设置返回给 GNOME 的错误后立即调用 gjs_log_exception()
Shell。您应该能够在系统日志 (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 之外,那么它们将无法工作。
在开发过程中,我在我的扩展程序中引入了一个错误,导致 gnome-shell
在尝试加载扩展程序时崩溃,并显示以下措辞相当宽泛的错误消息:
Execution of main.js threw exception: JS_EvaluateScript() failed
能够在
时测试一个扩展就好了- 获取描述性错误消息,告诉我错误的实际位置
- 不要冒险让整个系统崩溃 shell
这可能吗?
我已经搜索了 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
我知道我可以使用 LookingGlass 来评估一些 JS 字符串。
我知道错误是由于使用无效参数调用本机代码 (St
) 引起的。
该错误消息中的 JS_EvaluateScript
已过时,并且不是特别有用。它将在即将推出的 GNOME 3.28 中得到改进。
您正在寻找的代码(带有改进的错误消息)是 here,您可以看到在设置返回给 GNOME 的错误后立即调用 gjs_log_exception()
Shell。您应该能够在系统日志 (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 之外,那么它们将无法工作。