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


72

我想开发GNOME Shell扩展,发现进入开发过程确实很容易,但是我仍然不知道如何有效地调试/测试我的扩展。

是否有用于此目的的工具?有没有像现代浏览器或javascript服务器环境中一样的实时控制台?

Answers:


72

是的,实时控制台称为“ Looking Glass”,可以通过按Alt+F2lg在提示符下键入来启动。

更多信息:https//live.gnome.org/GnomeShell/LookingGlass


1
只是关于lookGlass的一个小疑问:我global.log('hello world');在扩展程序中包含了一个循环,但未在控制台中记录任何内容。扩展不能以编程方式记录消息吗?
marcio

1
我已经有了答案。它可以正确记录日志,但是在脚本中进行任何更新(<kbd> Alt </ kbd> + <kbd> F2 </ kbd>并键入r)之后,您必须重新加载gnome shell环境。
marcio

您知道为什么lg无法从命令行工作吗?使用alt + f2,但不能从终端运行!
Pipo's

它不是您可以从命令行调用的可执行文件。它特定于GNOME Shell。
ptomato

1
我遇到与@marcio相同的问题,扩展日志消息未在lg中显示,但我已经重新启动了shell。如何在gnome shell扩展中打印消息,然后查看它?
保罗

44

在Fedora 20(可能还有任何新的Linux发行版)上,您可以使用以下命令:

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

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

我相信在Fedora 22上,它被替换为:

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

2
这比gnome-shell --replace自从id不会将gnome shell会话附加到终端要好得多:)
marcio 2014年

1
在ubuntu上也是如此
Toni Chaz

21

窥镜很棒。但是,如果您需要一个直立的控制台,则可以通过LG获得一个,但至少不能从3.6开始。

如果弹出一个终端并输入gnome-shell --replace,将从那里运行gnome-shell,替换正在运行的实例,然后全局日志输出将显示在该控制台中。

您可以通过Alt- F2 lg,然后global.log("foo")在“评估程序”选项卡中,使用Looking Glass进行测试。


1
使用该方法后取消gnome-shell时,除鼠标外,其他所有东西都冻结了。我必须重新启动机器才能使其重新运行。
EndangeredMassa 2013年

2
那是因为您杀死了唯一的gnome-shell实例。C-c完成后,您无需将其杀死,而是单击C-z以将其暂停。然后键入bg<CR>控制台(键入此命令时可能看不到正在键入的内容),然后gnome-shell将在后台运行。接下来,运行disown <Tab><CR>以从终端窗口中分离该过程,然后您可以安全地关闭终端窗口。
Shrikant Sharat 2014年

8

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


8
@ User231371要指出:在Ubuntu gnome中,日志位于〜/ .cache / upstart / gnome-session.log中。
埃里克·罗伯逊

5

在开发自己的扩展程序时,其他答案对我而言并不真正有用。但是,结果是:

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);

如果您不知道gnome会话的正确路径,也可以使用:

journalctl -f | grep gnome-session

为什么它不起作用,可能是因为我的gnome-session-binary路径不同,这可能与正在安装的较新版本的gnome有关。


1
在Fedora 26上,正确的路径是/etc/libexec/gnome-session-binary
akaihola

1
但是,global.log()消息不会在journalctl输出中显示,也不会在Looking Glass中显示。是否可能在Fedora 26上默认注销?
akaihola

2
相反,日志消息的确显示在中journalctl /usr/bin/gnome-shell
akaihola

4

我还不能对其他答案发表评论,所以我想补充一下-但是可能是:

  • 对于杰夫的回答评论2,只是通过重新启动外壳alt+f2-再renter,当这种情况发生-终端运行会话将自动结束(至少在Debian)。

  • 我建议使用jsnjack的答案进行一般调试,这也可以与Debian Jessy一起使用。也许想要sudo。无论在哪个终端上运行它,它都将显示gnome错误以及global.log()消息。

如果有的话,这为我提供了更完整的参考-因为在参考信息时我不止一次地浏览此页面,所以我不会在内存中记忆犹新。


3

Anjuta Dev-Studio是使用gnome-shell扩展的绝佳工具。它配备了调试器,GUI设计器,版本控制等。在gnome的wiki页面上,甚至还有一个指导教程,用于将Anjuta与gnome-shell扩展项目一起使用


调试器如何工作?Anjuta甚至没有以任何直观的方式运行该扩展程序,它仅打印错误。Wiki链接没有提及有关Anjuta的任何信息,只是它存在并且建议不要使用它!
jdk1.0

不确定页面是否已更改。您可以在anjuta中检查其他相关页面以使用调试器。例如:developer.gnome.org/anjuta-manual/stable/debug-tips.html.en
ILMostro_7 '19

3

我们在这里开发针对gnome-shell扩展开发的emacs软件包:https : //github.com/paperwm/gnome-shell-mode

它仍处于“测试版”(2017年12月)中,但它已经非常有用。

特征

  • 自动补全(比窥镜提供的更好)
  • 行,选择,当前函数,缓冲区的值(可选地将结果粘贴到注释中的缓冲区中)
  • 逃避时突出显示错误
  • 文档查找助手
  • 帮助程序无需重新启动gnome-shell即可重新加载您正在处理的模块
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.