编辑
2025-01-20
记录知识
0
请注意,本文编写于 158 天前,最后修改于 59 天前,其中某些信息可能已经过时。

目录

一、关于GTK调试
二、检查器打开方式
2.1 通过命令行
2.2 通过宏
2.3 通过快捷键
三、检查器界面
3.1 对象
3.2 统计信息
3.3 资源
3.4 CSS
3.5 可视化
3.6 常规
3.7 选择对象
3.8 细节
四、总结

我们系统虽然已经经历过一次qt化,但是仍然有一些默认的程序还是基于gtk的,例如mate-terminal和filezilla,这些程序在我们系统上,针对一些使用习惯上的问题,还是存在一些bug的,对于这些问题,我们是操作系统的提供者,所以有必要查看原因和解决。

例如filezilla程序在我们默认kylin-virtual-keyboard程序上会默认自动唤起虚拟键盘,经过定位我们发现此行为的原因是filezilla主动发起了focus事件,所以对于kylin-virtual-keyboard的行为是正常的,这种情况下,我们就需要调试filezilla。而针对gtk程序,通常情况下,我们有一个检查程序inspector,这个程序可以给我们初步定位问题,本文章主要介绍一下inspector的使用说明。便于大家针对gtk的程序来进行初步问题筛查

一、关于GTK调试

针对gtk类的程序,我们都可以用gtk debug来尝试调试,gtk包含了多个调试选项,这里就不一一列举了,可以参考如下文章,我们以gtk3为例

https://docs.gtk.org/gtk3/running.html

我们关心的是inspector,所以如下:

interactive: Open the interactive debugger

关于检查器的官方介绍文档,可以参考如下:

https://developer.gnome.org/documentation/tools/inspector.html

二、检查器打开方式

inspector有多种打开方式,主要如下:

2.1 通过命令行

我们可以通过--gtk-debug=interactive打开程序的检查器,以filezilla为例

# filezilla --gtk-debug=interactive

2.2 通过宏

可以通过赋予GTK_DEBUG的值来打开调试,如下:

# GTK_DEBUG=interactive filezilla

2.3 通过快捷键

为了支持快捷键打开检查器,我们需要先将gtk的gsettings值打开,如下:

gsettings set org.gtk.Settings.Debug enable-inspector-keybinding true

此时我们可以通过如下两种方式打开(在运行程序内部按下快捷键)

ctrl + shift + i / ctrl + shift + d

三、检查器界面

打开后调试界面如下所示:

image.png 通过上述图片我们可以发现几个要素,如下:

  • 对象
  • 统计信息
  • 资源
  • CSS
  • 可视化
  • 常规
  • 选择对象
  • 细节

3.1 对象

我们打开检查器时,默认就打开了对象信息,如上图,未展开情况下我们可以知道此程序顶层存在几个widget,可以发现filezilla总共存在三个GtkWindow顶层窗口。这里两个置灰的窗口意味着未正常显示。所以如果我们点击非置灰的GtkWindow,我们可以看到filezilla程序会闪烁如下:

image.png 根据上述,我们可以知道第二个GtkWindow就是filezilla的顶层窗口,我们可以进一步跟踪,直到找到远程站点的文件列表的GtkWidget是什么类型为止,如下图,我们发现远程站点的文件列表实际上是一个GtkScrolledWindow类型。

image.png

3.2 统计信息

如果需要显示统计信息,则需要将glib设置为debug版本,也就是提供 --enable-debug参数,并且程序在运行时需要提供如下配置:

GOBJECT_DEBUG=instance-count

这里我们的系统没有把glib编译带此参数,故无法演示

3.3 资源

对于资源,我们可以理解和qt的res一样,也就是这个程序需要加载的动效,图片,和css,主要是一个统计作用,效果如下:

image.png

3.4 CSS

样式表我们可以给对应的窗口设置相应的样式用作测试css效果。

3.5 可视化

这里有多种关于主题,窗口属性,渲染细节的设置,细节不一一展示了,如下所示。

image.png

3.6 常规

这里提供了gtk版本等一系列的基本信息的查看,如下:

image.png

3.7 选择对象

inspector可以支持直接选择对象,我们点击右上角的准星按钮如下:

image.png 此时我们的光标变成准星来选择窗口,如下

image.png 当选择完毕,则提供这个窗口的显示细节,如下显示

image.png 以属性为例,我们可以动态的修改某个子窗口的属性值如下

image.png

3.8 细节

细节是靠近选择对象的按钮,它可以将窗口转到窗口的具体细节,例如杂项,属性,信号,子元素属性,类层级结构,CSS选择器,CSS节点,放大镜,如下图:

image.png

四、总结

至此,我们介绍了inspector的基本操作,希望这些介绍有助于我们调试linux上的gtk程序