Как я могу протестировать расширение оболочки GNOME без риска сбоя оболочки?

Во время разработки я допустил ошибку в своем расширении, которая приводит к сбою gnome-shell при попытке загрузить расширение со следующим довольно широко сформулированным сообщением об ошибке:

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

Было бы неплохо иметь возможность протестировать расширение во время

  • получение описательных сообщений об ошибках, которые сообщают мне фактическое местоположение ошибки
  • не рисковать сломать всю оболочку

Это возможно?


Я уже просмотрел репозитории gnome-shell и gjs, чтобы попытаться найти способ улучшить сообщение об ошибке. Я нашел три сайта вызовов, которые выдают ошибку с префиксом Execution of main.js threw exception:, но я не смог найти фактический вызов JS_EvaluateScript в GJS.


Я также попытался запустить свое расширение с помощью 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) с недопустимыми аргументами.


person raphinesse    schedule 06.02.2018    source источник
comment
Если вы беспокоитесь о сбое оболочки, вы можете протестировать расширение в оболочке, работающей на отдельном X-сервере, например. Xnest или Xephyr. Или то, что предлагает Wayland...   -  person el.pescado    schedule 08.02.2018


Ответы (1)


JS_EvaluateScript в этом сообщении об ошибке устарело и не особенно полезно. Это будет улучшено в предстоящем GNOME 3.28.

Код, который вы ищете (с улучшенным сообщением об ошибке): здесь, и вы можете увидеть вызов gjs_log_exception() сразу после установки ошибки, которая возвращается в оболочку GNOME. Вы сможете найти это исключение в системном журнале (sudo journalctl -xb) даже в вашей текущей версии GNOME.

Всегда есть риск сбоя оболочки, так как собственный код может дать сбой, если вы введете неверный ввод. Мы стремимся предотвратить сбои в самом 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, они не будут работать.

person ptomato    schedule 07.02.2018