调试

这部分文档包含如何调试Flatpak应用。

运行调试工具

因为Flatpak在沙盒中运行应用,调试工具不能以通常的方式使用,而必须运行在沙盒中。为了在应用沙盒中运行shell,需要使用 --command 选项运行:

$ flatpak run --command=sh --devel <application-id>

为给定ID的应用创建一个沙盒,而不是运行应用,在沙盒中运行shell。根据shell的提示, 然后可以运行应用。也可以使用任何你想用的调试工具。如,通过 gdb 运行应用:

$ gdb /app/bin/<application-binary>

这是如何工作的呢? --devel 选项告诉Flatpak使用SDK作为运行时,而SDK含有像 gdb 这样的调试工具。 --devel 选项也让沙盒初始化时启动调试。

备注

Freedesktop SDK(许多其他的SDK基于这个)含有许多调试工具,如: gdb , strace , nm , dbus-send , dconf 等等。

当有权限调试应用和使用的运行时时, gdb 是很有用的。Flatpak会把调试信息分离到扩展中,你在调试前需要安装这些扩展:

$ flatpak install <runtime-id>.Debug

当使用 --devel 选项时,Flatpak将自动使用任何它能找到的匹配的调试扩展。

在没有安装调试扩展的情况下,也可以在应用沙盒中运行shell。这通过使用 flatpak-builder--run 选项完成:

$ flatpak-builder --run <build-dir> <manifest> sh

启动一个含有构建结果的沙盒,然后在沙盒里运行shell。

创建调试扩展

像其他的包系统一样,Flatpak也把笨重的调试信息和常规内容分离,作为 .Debug 扩展单独使用。

当构建一个应用时, flatpak-builder 自动创建一个 .Debug 扩展。可以使用 no-debuginfo 选项禁止这个行为。

覆盖沙盒权限

当调试的时候,使用额外的权限有时是很有用的。这可以通过使用运行命令接受的各种选项实现。如:

$ flatpak run --devel --command=sh --system-talk-name=org.freedesktop.login1 <application-id>

此命令在给定应用程序的沙箱中运行shell,授予它访问logind对应的D-Bus服务的权限。

Inspecting portal permissions

Flatpak has a number of commands that allow to manage portal permissions for applications.

To see all portal permissions of an application, use:

$ flatpak permission-show <application-id>

To reset all portal permissions of an application, use:

$ flatpak permission-reset <application-id>

Interacting with running sandboxes

You can see all the apps that are currently running in Flatpak sandboxes (since 1.2):

$ flatpak ps

And, if you need to, you can terminate one by force (since 1.2):

$ flatpak kill <application-id>