运行和调试 GTK 应用程序 [src]

环境变量

GTK 会检查许多环境变量,包括标准变量,例如 LANGPATHHOMEDISPLAY;主要用来确定查找特定文件的路径。 X11WaylandWindowsBroadway GDK 后端使用一些其他环境变量。

请注意,一般将环境变量用于调试目的。不能保证环境变量的 API 稳定,不应将环境变量用于最终用户配置和自定义。如果你觉得需要以编程方式设置其中一个变量,则应该要求提供 API 来实现你的目的。

GTK_DEBUG

此变量可以设置为一个调试选项列表,这会导致 GTK 打印出不同类型的调试信息。

操作
操作和菜单模型
构建器
GtkBuilder 支持
builder-objects
未使用的 GtkBuilder 对象
几何
大小分配
icontheme
图标主题
iconfallback
有关图标后备的信息
keybindings
键盘快捷键
modules
模块和扩展
printing
打印
size-request
大小请求
text
文本小组件内部
tree
树形小组件内部
constraints
约束和约束求解器
layout
布局管理器
accessibility
可访问性状态更改

一些键不仅用于记录,还用于影响行为

interactive
打开 交互式调试器
no-css-cache
绕过 CSS 样式属性的缓存
snapshot
在生成的快照中包括调试渲染节点
invert-text-dir
与语言环境相比,反转文本方向

特殊值 all 可用于开启所有调试选项。特殊值 help 可用于获取所有支持的调试选项的列表。

GTK_PATH

指定当 GTK 寻找动态加载的对象时(例如输入法模块和打印后端)要搜索的目录列表。如果动态加载的对象的路径被指定为绝对路径名,则 GTK 会直接加载该对象。否则,GTK 会依次遍历 GTK_PATH 中的目录,然后遍历系统默认目录(即 libdir/gtk-4.0/modules)。(如果定义了 GTK_EXE_PREFIX,则 libdir$GTK_EXE_PREFIX/lib。否则,则为 GTK 在配置时的 libdir,通常为 /usr/lib/usr/local/lib。)

对于此列表中的每个目录,GTK 实际上会以子目录进行查找 directory/version/host/type。其中 version 是从 GTK 版本中派生出来的(使用 pkg-config --variable=gtk_binary_version gtk4 从脚本中确定这一点),host 是构建 GTK 的体系结构。(使用 pkg-config --variable=gtk_host gtk4 从脚本中确定这一点),而 type 是特定于模块类型的目录;目前可以是 modulesimmodulesprintbackends,对应上面提到的模块类型。versionhost 或两者都可以省略。GTK 首先在最具体的目录中查找,然后在具有较少组件的目录中查找。GTK_PATH 的组件在 Linux 和 Unix 上由“:”字符分隔,在 Windows 上由“;”字符分隔。

此环境变量会被 GTK 2.x 和 GTK 3.x 读取,这也使其不适合在系统范围内(或会话范围内)对其进行设置,因为这样做会导致使用不同 GTK 版本的应用程序看到不兼容的模块。

GTK_IM_MODULE

指定要优先使用的 IM 模块,而不是根据语言环境确定的模块。如果未在此设置,并且你使用的是启用了 `XSETTINGS` 且 `Gtk/IMModule` 中的值系统,那么该值将用作默认的 IM 模块。这也可以是输入法的冒号分隔列表,GTK 会依次尝试它们,直到它在系统中找到一个可用的。

GTK_MEDIA

指定为 GtkMediaFile 加载哪个后端。可能的值取决于构建 GTK 时使用的选项,其中可能包括“gstreamer”和“none”。如果设置为“none”,那么媒体播放将不可用。可以使用特殊值“help”来获取所有支持的媒体后端列表。

GTK_EXE_PREFIX

如果设置,GTK 将使用 $GTK_EXE_PREFIX/lib,而不是在编译 GTK 时配置的 libdir。

GTK_DATA_PREFIX

如果设置,GTK 将使用 $GTK_DATA_PREFIX,而不是在编译 GTK 时配置的前缀。

GTK_THEME

如果设置,则让 GTK 使用命名的主题,而不是由 gtk-theme-name 设置指定的主题。这主要用于轻松调试主题问题。

还可以通过在后面附加一个冒号和一个变体名称来指定一个主题变体进行加载,如下所示:GTK_THEME=Adwaita:dark

以下环境变量由 GdkPixbuf、GDK 或 Pango 使用,而不是由 GTK 本身使用,但我们仍在此处列出它们以求完整性。

GDK_PIXBUF_MODULE_FILE

指定列出要加载的 GdkPixbuf 加载器模块的文件。此环境变量将覆盖默认值 `libdir/gtk-4.0/4.0.0/loaders.cache`(`libdir` 是配置 GTK 时指定的 sysconfdir,通常为 `/usr/lib`。)

loaders.cache 文件是由 gdk-pixbuf-query-loaders 实用程序生成的。

GDK_DEBUG

此变量可以设置成调试选项的列表,这会导致 GDK 打印出不同类型的调试信息。

misc
其他信息
events
有关事件的信息
dnd
有关拖放的信息
input
有关输入的信息(主要是 Windows)
eventloop
有关事件循环操作的信息(主要是 macOS)
有关帧时钟的信息
设置
有关 xsettings 的信息
opengl
有关 OpenGL 的信息
vulkan
有关 Vulkan 的信息
选择
有关选择的信息
剪贴板
有关剪贴板的信息
dmabuf
有关 dmabuf 处理的信息(仅适用于 Linux)
卸载
有关子曲面和图形卸载的信息(仅适用于 Wayland)

许多选项会影响行为,而不是记录

门户
强制使用 门户
无门户
禁用 门户 的使用
强制卸载
强制对所有纹理进行图形卸载,即使速度较慢。这允许在没有 dmabuf 的情况下调试卸载。
gl-no-fractional
针对 OpenGL 禁用分数缩放。
gl-debug
在 OpenGL 中插入调试信息
gl-prefer-gl
相对于 OpenGL ES 而言,更喜欢 OpenGL。这是 GTK 4.14 之前的默认行为。
vulkan-validate
加载 Vulkan 验证层(如果可用)
默认设置
强制针对 xsettings 使用默认值
高深度
如果可能,使用高位深度渲染
线性
启用线性渲染
hdr
强制 HDR 渲染
无垂直同步
立即重新绘制(与动画使用 100% CPU)

特殊值 all 可用于开启所有调试选项。特殊值 help 可用于获取所有支持的调试选项的列表。

GSK_DEBUG

此变量可以设置为调试选项列表,导致 GSK 打印出不同类型的调试信息。

渲染器
一般性渲染器信息
vulkan
检查 Vulkan 错误
着色器
有关着色器的信息
后备
有关渲染器中后备用法的信息
高速缓存
有关高速缓存的信息
详细
在渲染时打印详细的输出

许多选项会影响行为,而不是记录

几何
显示边界(当使用 cairo 时)
全重绘
强制全重绘
临时存放
使用临时图像存储纹理上传(仅适用于 Vulkan)
cairo
覆盖 cairo 绘图中的错误模式(发现后备)
遮挡
通过遮挡剔除优化后的区域覆盖高亮

特殊值 all 可用于开启所有调试选项。特殊值 help 可用于获取所有支持的调试选项的列表。

GDK_BACKEND

如果设置,则选择要使用的 GDK 后端。选择后端需要使用对该后端提供支持编译的 GTK。如果在您所用的 GDK 库中包含以下后端,则可以选择这些后端

macos
选择本机 Quartz 后端
win32
选择适用于 Microsoft Windows 的本机后端
x11
选择用于连接到 X11 服务器的本机后端
broadway
选择 Broadway 后端,以供在网络浏览器中显示
wayland
选择用于连接到 Wayland 合成器的 Wayland 后端

此环境变量可以包含后端名称的逗号分隔列表,按照顺序尝试。列表中还可能包含一个 *,表示:尝试所有剩余的后端。可以使用特殊值 help 来使 GDK 打印出所有可用后端的列表。有关选择后端的详细信息,请参见 gdk_display_manager_get() 函数。

GDK_DISABLE

此变量可设置为值列表,造成 GDK 禁用某些功能。

gl
禁用 OpenGL 支持
gl-api
不允许使用 OpenGL GL API。这强制使用 GLES
gles-api
不允许使用 OpenGL GLES API。这强制使用 GL
egl
不允许使用 EGL 上下文
glx
不允许使用 GLX
wgl
不允许使用 WGL
vulkan
禁用 Vulkan 支持
dmabuf
禁用 dmabuf 支持
卸载
禁用图形卸载到子表面
color-mgmt
禁用颜色管理
aerosnap
禁用 Windows 上的 Aerosnap 支持
threads
禁用在可能的情况下使用线程

GDK_GL_DISABLE

此变量可设置为值列表,造成 GDK 禁用 OpenGL 支持的扩展功能。请注意,如果 GL 驱动程序不支持,这些功能可能已禁用。

debug
GL_KHR_debug

unpack-subimage :GL_EXT_unpack_subimage

half-float :GL_OES_vertex_half_float

sync :GL_ARB_sync

base-instance :GL_EXT_base_instance

GDK_VULKAN_DISABLE

此变量可设置为值列表,造成 GDK 禁用 Vulkan 支持的功能。请注意,如果 Vulkan 驱动程序不支持,这些功能可能已禁用。

dmabuf
从不导入 Dmabuf
ycbr
不支持 Ycbcr 纹理
semaphore-export
禁用导出的 dmabuf 的同步
semaphore-import
禁用导入的 dmabuf 的同步
incremental-present
不发送损坏区域
swapchain-maintenance
不使用高级 swapchain 功能

特殊值 all 可用于启用所有值。特殊值 help 可用于获取所有受支持值的列表。

GSK_RENDERER

如果设置,则选择要使用的 GSK 渲染器。可选择以下渲染器,只要它们包含在你正在使用的 GTK 库中,并且 GDK 后端支持它们

help
打印有关可用选项的信息
broadway
选择特定于百老汇后端的渲染器
cairo
选择后备 Cairo 渲染器
ngl
选择 OpenGL 渲染器
vulkan
选择 Vulkan 渲染器

注意

如果在装有 nVidia 显卡的 Windows 系统上运行 Nahimic 3 服务,你需要执行以下操作之一

  • 停止“Nahimic 服务”
  • GTK 应用程序插入到 Nahimic 阻止列表中,如 nVidia 论坛 中所述
  • 使用 Cairo 渲染器(代价是无法使用 OpenGL 功能)
  • 使用 GDK_DEBUG=gl-gles(如果你知道构建启用了 GLES 支持)。

这是一个众所周知的问题,如上文链接所述,并且影响了许多应用程序——遗憾的是,由于该问题存在于 nVidia 显卡驱动和/或 Nahimic 3 代码中,我们无法在 GTK 方面进行修复;尝试上述解决方法之前的最佳办法是尝试更新您的显卡驱动和 Nahimic 安装。

GSK_GPU_DISABLE

此变量可以设置一个值列表,这些值会导致 GSK 禁用“ngl”和“vulkan”渲染器的某些优化。

clear
使用着色器而不是 vkCmdClearAttachment()/glClear()
merge
对每个操作使用一个 vkCmdDraw()/glDrawArrays()
blit
使用着色器而不是 vkCmdBlit()/glBlitFramebuffer()
gradients
不超采样渐变
mipmap
避免创建 MIP 贴图
to-image
不对节点图像创建快速路径
遮挡
禁用通过不透明度跟踪进行遮挡剔除
repeat
重复绘制操作,而不是使用屏幕外和 GL_REPEAT

特殊值 all 可用于启用所有值。特殊值 help 可用于获取所有受支持值的列表。

GSK_CACHE_TIMEOUT

覆盖“ngl”和“vulkan”渲染器中缓存 GC 的超时。该值可以为 -1 以完全禁用 GC,为 0 以强制 GC 在每一帧之前发生,或者为正数以在每 n 秒钟的超时时间内进行 GC。默认超时时间为 15 秒。

GSK_MAX_TEXTURE_SIZE

将纹理大小限制在这个值和 OpenGL 极限之间的较小值,用于“gl”渲染器中的纹理大小。这可以用来调试纹理切片的相关问题,在这些系统中,OpenGL 的纹理大小限制会让纹理切片难以进行测试。

GTK_CSD

此环境变量的默认值为 1。如果更改为 0,这将禁用在 GTK 窗口中默认使用客户端装饰,因此让窗口管理器负责绘制没有自定义标题栏小部件的窗口的装饰。

CSD 总是在设置了自定义标题栏小部件的窗口中使用,因为 WM 不会在自定义窗口周围绘制其他标题栏或其他装饰。

GTK_A11Y

如果设置,选择要使用的辅助功能后端。可以在以下后端中进行选择,只要它们包含在您使用的 GTK 库中

help
打印有关可用选项的信息
atspi
选择 AT-SPI 辅助功能后端
accesskit
选择 AccessKit 辅助功能后端
test
选择测试后端
none
禁用辅助功能后端

建议将 test 辅助功能后端用于测试套件和远程持续集成管道。

XDG_DATA_HOME, XDG_DATA_DIRS

GTK 使用这些环境变量查找图标主题和 MIME 信息。有关更多信息,请参阅 图标主题规范共享 MIME-信息数据库基本目录规范

DESKTOP_STARTUP_ID

GTK 使用此环境变量根据 启动通知规范 提供启动通知。按照规范,GTK在读取此变量后取消设置此变量(以防止它泄漏到子进程)。因此,如果您需要将此值用于自己的目的,则必须在调用 gtk_init() 之前读取此值。

交互调试

The inspector

GTK 包括一个交互调试器(称为 GTK 检查器),它使您能在运行时浏览任意 GTK 应用程序的小组件树,以及调整主题和触发可视化调试辅助工具。您可以在将更改应用于代码之前,轻松地尝试运行时更改。

请注意,GTK 检查器只能显示 GTK 内部信息。它无法理解 GTK 应用程序中特定于应用程序的逻辑。此外,GTK 检查器在应用程序进程中运行这一事实限制了它可以执行的操作。它被视为完全成熟的调试器和系统跟踪功能(如 DTrace)的补充,而不是替代品。

要启用 GTK 检查器,可以使用 Control+Shift+IControl+Shift+D 快捷键,或者设置 GTK_DEBUG=interactive 环境变量。

打开检查器后,它会侦听一些快捷键,这些快捷键可让您使用其框架和事件记录功能,而无需将焦点移出应用程序窗口:Super+R 开启和关闭记录,Super+C 记录单个帧。

有另外一些环境变量可以设置,以影响检查器呈现其 UI 的方式。GTK_INSPECTOR_DISPLAYGTK_INSPECTOR_RENDERER 确定检查器正在使用的 GDK 显示和 GSK 渲染器。

在某些情况下,向用户提供 GTK 检查器访问权限可能不合适。可以使用 enable-inspector-keybindingorg.gtk.Settings.Debug GSettings 架构中的键来禁用快捷键。

分析

GTK 支持使用 sysprof 进行分析。它以可由 sysprof 或 GNOME Builder 显示的格式,导出有关帧时钟阶段的时间信息和 GskRenderers 的各种特征。

获取数据的简单方法是在 sysprof-cli 包装器下运行应用程序,它会将分析数据写入名为 capture.syscap 的文件。

从 sysprof 启动应用程序时,它会设置 SYSPROF_TRACE_FD 环境变量,将 GTK 指向要写入分析数据的文件描述符。