gnome-shell - 如何测试我的 GNOME Shell 扩展而不会有 shell 崩溃的风险?

标签 gnome-shell gnome-shell-extensions gjs

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

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

如果能同时测试一个扩展就好了

  • 获取描述性错误消息,告诉我错误的实际位置
  • 不要冒让整个 shell 崩溃的风险

这可能吗?


我已经搜索了 gnome-shellgjs 存储库以尝试找到改进错误消息的方法。我发现三个调用站点发出前缀为 Execution of main.js throw 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 字符串。


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

最佳答案

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

您要查找的代码(带有改进的错误消息)是 here并且您可以看到在设置返回到 GNOME Shell 的错误后立即调用了 gjs_log_exception()。您应该能够在系统日志 (sudo journalctl -xb) 中找到该异常,即使在您当前的 GNOME 版本上也是如此。

总是存在使 shell 崩溃的风险,因为如果输入错误, native 代码可能会崩溃。我们的目标是在假定 native 代码运行良好的情况下防止 GJS 本身崩溃。一旦你隔离了问题,如果它看起来像 GJS 可以阻止的东西,请在 https://gitlab.gnome.org/GNOME/gjs 上提交错误报告。 .

This question and answer如果在导入 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 - 如何测试我的 GNOME Shell 扩展而不会有 shell 崩溃的风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48644467/

相关文章:

css - 是否可以在 GNOME 3.24 中消除服务器端窗口标题栏?

javascript - 带有 gnome 扩展的 ClutterShaderEffect

gnome-3 - 以编程方式调用 Gnome Shell 快捷方式

javascript - GNOME Shell 扩展按钮

gnome-shell - 无需重新启动即可安装 GNOME Shell 扩展?

linux - 如何在python中编写一个可以打开一个新的linux终端并自动执行源代码的脚本

javascript - 如何开始编写 Gnome Shell 扩展

gnome-shell-extensions - 编写 GNOME Shell 扩展的文档

javascript - Gnome 扩展 - 运行 shell 命令