我相信(如果我错了,请纠正我)当使用gdb
和gdbserver
进行远程调试时,在gdbserver
下运行在目标上的二进制文件不需要二进制文件中的调试信息,但运行gdb
的主机执行此操作。Qt 5.x嵌入式调试 - 部署剥离的二进制文件?
我们的应用程序二进制调试符号大约是112兆(!)。如果我运行strip,这个二进制文件只有6.7 megs,这将会更快地部署到我们的目标。
Qt Creator可以在部署它之前去除二进制文件吗?我们仍然可以调试吗?
我相信(如果我错了,请纠正我)当使用gdb
和gdbserver
进行远程调试时,在gdbserver
下运行在目标上的二进制文件不需要二进制文件中的调试信息,但运行gdb
的主机执行此操作。Qt 5.x嵌入式调试 - 部署剥离的二进制文件?
我们的应用程序二进制调试符号大约是112兆(!)。如果我运行strip,这个二进制文件只有6.7 megs,这将会更快地部署到我们的目标。
Qt Creator可以在部署它之前去除二进制文件吗?我们仍然可以调试吗?
要去掉符号,你可以让Qt Creator在qmake和make之后运行一个最终的构建步骤,在应用程序包中的二进制文件上调用“strip”命令。例如: -
strip -u -r ./MyApplication/Contents/MacOS/MyApplication
为了调试,你需要一个separate .dsym file到构建,其中包含符号期间产生。如果它驻留在主机上,调试器应该自动选择它;它使用lldb,尽管使用gdb,您可能需要手动加载符号文件。
如何启用额外的构建步骤
从右侧工具栏中选择项目
确保你在构建和运行选项卡(GraphicsScene是只是项目的名称)
根据构建步骤,您会看到两个步骤qMake
和Make
。选择在相关领域添加构建步骤为定制工序
填写您可能需要纠正的路径,而不仅仅是复制这些:
当构建已完成,strip命令将运行。如果您有任何错误,则可能是strip命令路径或应用程序包可执行文件路径的问题。
请注意,如果您需要完整剥离路径,它将驻留在/ usr/bin/strip中。
至于符号文件,我相信你可以使用带有dsym文件路径参数的addsymbolfile
命令。然而,gdb已经被弃用,现在你应该真的使用lldb,一旦它被Spotlight编入索引,它就会自动找到dsym文件。
您可以去除调试符号是这样的:
添加一行到您的make文件,这会从中删除所有调试符号:
CD $(MY_BINARY_INSTALL_PATH);剥离--strip调试$(MY_BINARY_INSTALL_PATH)/斌/ mybinary -o $(MY_BINARY_INSTALL_PATH)/斌/ mybinary
如果你想删除从中你可以使用像所有符号:
CD $(MY_BINARY_INSTALL_PATH);带--strip-所有$(MY_BINARY_INSTALL_PATH)/斌/ mybinary -o $(MY_BINARY_INSTALL_PATH)/斌/ mybinary
剥离所有的符号将有助于减少二进制文件的大小显著
我使用QtCreator与我的工具链的gdb,没什么特别。该项目使用qmake从Creator构建。你可以扩展一下如何启用额外的构建步骤,以及如何提供这些符号? – Steve
我已经更新了回答你的问题的答案。 – TheDarkKnight
这个自定义进程对开发者机器来说是本地的东西吗,还是保存在.pro文件的某个地方?我希望能够实现这一点,并为我团队中的其他开发人员“正常工作”。在本周结束之前我会给出这个镜头。 – Steve