Javascript 如何测试/调试GNOME外壳扩展?有什么工具吗?

Javascript 如何测试/调试GNOME外壳扩展?有什么工具吗?,javascript,gnome-3,gnome-shell,gnome-shell-extensions,Javascript,Gnome 3,Gnome Shell,Gnome Shell Extensions,我想开发GNOME外壳扩展,并发现进入开发过程非常容易,但我仍然不知道如何有效地调试/测试我的扩展 是否有任何工具可用于此目的?在现代浏览器或javascript服务器环境中是否有类似的实时控制台?是的,实时控制台被称为“窥镜”,可以通过按Alt+F2并在提示下键入lg来启动 更多信息:镜子很好。如果你需要一个直板的控制台,你可以得到一个,但不是通过LG,至少不是3.6版 如果弹出打开一个终端并键入gnomeshell--replace,gnomeshell将从那里运行,替换正在运行的实例,全局

我想开发GNOME外壳扩展,并发现进入开发过程非常容易,但我仍然不知道如何有效地调试/测试我的扩展


是否有任何工具可用于此目的?在现代浏览器或javascript服务器环境中是否有类似的实时控制台?

是的,实时控制台被称为“窥镜”,可以通过按Alt+F2并在提示下键入
lg
来启动


更多信息:

镜子很好。如果你需要一个直板的控制台,你可以得到一个,但不是通过LG,至少不是3.6版

如果弹出打开一个终端并键入
gnomeshell--replace
,gnomeshell将从那里运行,替换正在运行的实例,全局日志输出随后将出现在该控制台中


您可以通过执行Alt-F2
lg
,然后在“Evaluator”选项卡中执行
global.log(“foo”)
来使用窥镜对其进行测试。

我更喜欢阅读
~/.xsession errors
~/.cache/gdm/session.log
文件以了解更多详细信息。一些错误消息可能与其他异常或错误有关。

Dev Studio是处理gnome外壳扩展的一个很好的工具;它配备了调试器、GUI设计器、版本控制等。在Fedora 20(可能还有任何新的linux发行版)上的gnome上,甚至有一个使用Anjuta和gnome外壳扩展项目的指导教程,您可以使用该命令:

journalctl /usr/bin/gnome-session -f -o cat
它不断(
-f
)在终端窗口中打印gnome会话生成的错误。我更喜欢
-o cat
标志,因为它显示的是完整的消息,没有时间标记

我相信,在Fedora 22上,它被以下内容取代:

journalctl /usr/bin/gnome-shell -f -o cat

我还不能对其他答案发表评论,所以我想补充一点——不管有多晚:

  • 对于Geoff回答中的注释2,只需通过
    alt+f2
    -然后
    r
    enter
    ,重新启动shell,当发生这种情况时,终端运行会话将自动结束(至少在Debian上)

  • 我推荐jsnjack的通用调试答案,它也适用于Debian Jessy;不过,我可能想
    sudo
    那样做。它将显示gnome错误,以及运行它的任何终端中的global.log()消息


如果有什么区别的话,这为我提供了一个更完整的参考资料——因为我在参考信息时不止一次地看到过这一页,我的记忆中并没有保持新鲜。

在开发自己的扩展时,其他答案对我来说真的不起作用。然而,我们所做的是:

journalctl /usr/lib/gnome-session/gnome-session-binary -f -o cat 
如果您想分离输出以仅查看您的应用程序,您可以使用:

journalctl /usr/lib/gnome-session/gnome-session-binary -f -o cat | grep [myAppId]
global.log('[myAppId]', valueToLog);
如果您还想使用上述方法访问非错误日志,您可以使用:

journalctl /usr/lib/gnome-session/gnome-session-binary -f -o cat | grep [myAppId]
global.log('[myAppId]', valueToLog);
如果您不知道gnome会话的正确路径,也可以使用:

journalctl -f | grep gnome-session

它不起作用的原因可能是因为我的gnome会话二进制路径不同,这可能与正在安装的gnome的较新版本有关。

我们正在开发一个针对gnome外壳扩展开发的emacs包:

它仍处于测试阶段(2017年12月),但已经非常有用了

功能

  • 自动完成(比窥镜提供的功能更好)
  • 行、选择、当前函数、缓冲区的评估(可选地将结果粘贴到注释中的缓冲区)
  • 评估时突出显示错误
  • 文档查找助手
  • 帮助器重新加载您正在处理的模块,而无需重新启动gnome shell

只是对lookingGlass的一点怀疑:我包括了
global.log(“hello world”)在我的扩展中的一个循环中,但控制台中没有记录任何内容。扩展不能以编程方式记录消息吗?我已经得到了答案。它正确地记录了日志,但是在脚本中进行任何更新(Alt+F2和键入
r
)后,您必须重新加载gnome外壳环境。您知道lg为什么不从命令行工作吗??!!!使用alt+f2但不使用终端!我遇到了与@marcio相同的问题,lg没有显示扩展日志消息,但我已经重新启动了shell。我如何在gnome外壳扩展中打印一条消息,然后查看它??您如何查看错误的源代码行号?当我在使用该方法后取消gnome外壳时,除了我的鼠标之外,所有东西都冻结了。我必须重新启动我的机器才能让它重新工作。那是因为你杀死了你唯一的gnome外壳实例。完成后,不要用
C-C
杀死它,而是点击
C-z
暂停它。然后在控制台中键入
bg
(键入此命令时,您可能看不到正在键入的内容),然后gnome shell将在后台运行。接下来,运行
disown
将进程与终端窗口分离,然后可以安全地关闭终端窗口。@User231371想指出:在Ubuntu gnome中,日志位于~/.cache/upstart/gnome-session.log中。这比
gnome shell--replace
好得多,因为id没有将gnome shell会话附加到终端:)在ubuntu wokrs Toon Fedora 26上,正确的路径是
/etc/libexec/gnome session binary
。但是,
全局.log()
消息不会出现在
日志TL
输出中,也不会出现在窥镜中。在Fedora 26上是否默认注销?相反,日志消息会显示在
journalctl/usr/bin/gnome shell中。调试器是如何工作的?Anjuta甚至没有以任何直观的方式运行扩展,它只打印错误。而维基链接除了说明Anjuta的存在并建议不要使用它之外,没有提及任何关于Anjuta的内容!不确定页面是否已更改。您可以查看其他相关页面,了解如何在anjuta中使用调试器;例如