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

标签 c++ qt debugging gdbserver

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

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

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

最佳答案

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

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

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

how to enable that extra build step

从右侧工具栏中选择项目

Menu bar

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

tabs

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

Build Steps

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

Enter details

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

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

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

关于c++ - Qt 5.x 嵌入式调试 - 部署剥离的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35468531/

相关文章:

debugging - Chrome 开发工具使用 Source Maps 调试 ionic 电容器 Angular 应用程序

node.js - 如何在 VSCode 中调试 nodemon 项目

c++ - 如何在源文件中使用头文件中声明的全局变量?

C++ 从标准输入读取文件名

C++ 错误 : expected primary-expression before ‘int’

c++ - 覆盖 QWidget::resizeEvent(QResizeEvent* event) 的奇怪行为

c++ - QtWebkit:支持javascript页面打开?

c++ - QML:如何从 C++ 代码正确地将属性传递给 PluginParameter 值?

c# - 调试控制台中的颜色

c++ - 查找数字数组中出现的特定数字的数量 (C++)