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

Ste*_*eve 9 c++ debugging qt gdbserver

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

我们带有调试符号的应用程序二进制文件大约是112兆(!).如果我运行strip,那么二进制文件只有6.7 megs,这可以更快地部署到我们的目标.

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

The*_*ght 2

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

strip -u -r ./MyApplication/Contents/MacOS/MyApplication
Run Code Online (Sandbox Code Playgroud)

为了进行调试,您需要在构建过程中生成一个单独的 .dsym 文件,其中包含符号。如果它驻留在主机上,调试器应该自动拾取它;它适用于 lldb,但使用 gdb 时,您可能需要手动加载符号文件。

如何启用额外的构建步骤

从右侧工具栏中选择项目

菜单栏

确保您位于“构建并运行”选项卡上(GraphicsScene 只是项目的名称)

选项卡

在“构建步骤”下,您将看到两个步骤,qMakeMake。为自定义流程步骤选择添加构建步骤

构建步骤

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

输入详细信息

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

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

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