调试¶
这部分文档包含如何调试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>