Qt 5.x 嵌入式调试 - 部署剥离的二进制文件?

Qt 5.x embedded debugging - deploy stripped binary?

我相信(如果我错了请纠正我)当使用 gdbgdbserver 进行远程调试时,gdbserver 下的目标上的二进制文件 运行ning不需要二进制文件中的调试信息,但主机 运行ning gdb 需要。

我们带有调试符号的应用程序二进制文件大约为 112 兆 (!)。如果我 运行 剥离,二进制文件只有 6.7 兆,部署到我们的目标会更快。

是否可以让 Qt Creator 在部署之前删除二进制文件?我们还能调试吗?

要去除符号,您可以让 Qt Creator 运行 在 qmake 和 make 之后执行最后的构建步骤,这会在您的应用程序包中的二进制文件上调用 'strip' 命令。例如:-

strip -u -r ./MyApplication/Contents/MacOS/MyApplication

为了调试,您需要在构建期间生成一个 separate .dsym file,其中包含符号。如果它驻留在主机上,调试器应该自动选择它;它使用 lldb,但使用 gdb,您可能需要手动加载符号文件。

how to enable that extra build step

Select 来自 right-side 工具栏的项目

确保您在构建和 运行 选项卡上(GraphicsScene 只是项目的名称)

构建步骤 下,您会看到两个步骤,qMakeMake。 Select 为自定义流程步骤添加构建步骤

填写您可能需要更正路径的相关字段,而不仅仅是复制这些:

构建完成后,剥离命令将 运行。如果您有任何错误,可能是 strip 命令的路径或应用程序包的可执行文件的路径有问题。

请注意,如果您需要剥离的完整路径,它位于 /usr/bin/strip。

至于符号文件,我相信你可以使用带有dsym文件路径参数的addsymbolfile命令。然而,gdb 已经被弃用了,你现在真的应该使用 lldb,一旦它被 Spotlight 索引,它会自动找到 dsym 文件。

您可以像这样去除调试符号:

在您的 make 文件中添加一行,这将从中删除所有调试符号:

cd $(MY_BINARY_INSTALL_PATH); strip --strip-调试 $(MY_BINARY_INSTALL_PATH)/bin/mybinary -o $(MY_BINARY_INSTALL_PATH)/bin/mybinary

如果你想从中删除所有符号,你可以使用类似的东西:

cd $(MY_BINARY_INSTALL_PATH);剥离 --strip-all $(MY_BINARY_INSTALL_PATH)/bin/mybinary -o $(MY_BINARY_INSTALL_PATH)/bin/mybinary

剥离所有符号将有助于显着减小二进制文件的大小