调试 Gnome-Shell 经验分享

系统 浏览器
最近在写 gnome-shell 的插件, 一般插件的异常是会被 gnome-shell 捕获到的, gnome-shell 一旦捕获到插件的异常会立即重载(最多两次), 因为 gnome-shell 每次重载的时候会自动清空 looking glass 里满的日志信息, 所以我们不知道到底是代码什么地方错了, 而且超过两次后 gnome-shell 是不会再次重载的,所以就不得不重启登录管理器重新进入桌面(所有进程都会被强制关闭), 这样是非常浪费调试时间的。 所以方法就是让 gnome-shell 在 gdb 里面跑, 这样 gnome-shell crash 以后可以从 gdb 得到堆栈信息从而快速调试程序。

最近在写 gnome-shell 的插件, 一般插件的异常是会被 gnome-shell 捕获到的, gnome-shell 一旦捕获到插件的异常会立即重载(最多两次), 因为 gnome-shell 每次重载

的时候会自动清空 looking glass 里满的日志信息, 所以我们不知道到底是代码什么地方错了, 而且超过两次后 gnome-shell 是不会再次重载的,所以就不得不重启登录管理器

重新进入桌面(所有进程都会被强制关闭), 这样是非常浪费调试时间的。

所以方法就是让 gnome-shell 在 gdb 里面跑, 这样 gnome-shell crash 以后可以从 gdb 得到堆栈信息从而快速调试程序。

下面是完整的调试步骤:

1. 正常登入 gnome-shell 桌面
2. 按 Ctrl+Alt+F1 进入终端并用同样的用户名登入
3. 用下面的代码导出 DISPLAY(让gnome-shell 在你指定的DISPLAY下显示):

export DISPLAY=:0

4. 用下面的代码启动 gdb:

gdb /usr/bin/gnome-shell

5. 在 gdb 中输入:

r --replace

6. 按 Ctrl+Alt+F7 切换回 gnome-shell 桌面, 然后可以重新畅游Gnome Shell了。
7. 当 gnome-shell 崩溃以后, 按 Ctrl+Alt+F1 切回终端就可以看到 gdb 里面的堆栈信息:
比如写3D 切换扩展代码有Bug, 在 gdb 可以看到一下信息:

Exception was: Error: Expected type 'ClutterActor' but got 'GObject'
        ...
       /home/andy/.local/share/gnome-shell/extensions/windows-alt-tab-3d@linuxdeepin.com/extension.js:625
        ...

从上面的堆栈信息就可以快速定位到 625 行代码有问题。

这样如果要重新加载 gnome-shell (无限次哦), 直接在 gdb 输入

r --replace

就可以了, 所有的程序都不会因为 gnome-shell 的崩溃而需要重新启动, 节省了大量的调试时间。

好了, 上面就是完整的调试 gnome-shell 的流程, 希望对大家调试 gnome-shell 有所帮助。Enjoy!

原文地址:http://planet.linuxdeepin.com/2012/01/12/test-gnome-shell-tips-fo-manateelazycat/

责任编辑:tuhaihe 来源: Linux Deepin官方博客
相关推荐

2013-10-08 14:51:29

Gnome 3Gnome-Shell

2011-07-15 09:46:27

Gnome-Shell

2011-01-10 10:29:27

Ubuntu 10.1Gnome-Shell

2017-02-14 09:28:08

GNOME Shell桌面Linux

2013-05-03 13:45:42

KVM故障调试

2009-12-16 16:37:59

Ruby on Rai

2012-01-29 19:50:39

Linux Deepi Gnome Shel

2011-12-21 10:40:16

Deepin GNOM

2022-01-24 11:45:25

GNOME 42GNOME ShelUI

2023-02-28 15:40:16

鸿蒙CPU渲染

2023-03-23 16:02:07

树莓派4GPU调试

2012-03-15 00:06:56

Ubuntu Unity GNOME

2009-02-13 14:36:27

GNOMEShell桌面组件

2011-07-12 13:41:15

C++

2011-06-01 14:18:12

Gnome ShellUbuntu 11.1

2022-06-02 09:14:14

GNOME源码编译Linux 发行版

2009-09-28 10:52:00

CCNA考试经验CCNA

2011-03-04 09:17:40

GNOMEUnityUbuntu

2016-09-20 09:04:06

LinuxGNOMEShell

2019-08-07 08:00:00

LinuxGnome Shell桌面
点赞
收藏

51CTO技术栈公众号