【发布时间】:2018-01-09 18:08:53
【问题描述】:
我已经通过 macOS 安装程序安装了 Qt 5.10.0。 我目前正在运行 OSX El Capitan 10.11.6。
每当我尝试加载任何 Qt 库/框架时,都会收到以下警告:
warning: (x86_64) /Users/randomuser/Qt/5.10.0/clang_64/lib/QtWidgets.framework/QtWidgets empty dSYM file detected, dSYM was created with an executable with no debug info.
我可以通过运行 lldb QtWidgets.framework 来重现警告
我尝试设置 DYLD_IMAGE_SUFFIX=_debug,但这似乎不起作用。
另外,运行 otool -L QtWidgets.framework/Versions/5/QtWidgets_debug 报告库链接到 QtCore 和 QtGui 的发布版本。
任何见解将不胜感激,谢谢!
编辑:
为了详细说明我尝试使用 DYLD_IMAGE_SUFFIX,我尝试了以下操作,但仍然导致上述警告。
export DYLD_IMAGE_SUFFIX=_debug
lldb
>env DYLD_IMAGE_SUFFIX=_debug
>target create QtWidgets.framework
>warning: (x86_64) /Users/randomuser/Qt5.10.0/5.10.0/clang_64/lib/QtWidgets.framework/QtWidgets empty dSYM file detected, dSYM was created with an executable with no debug info.
>Current executable set to 'QtWidgets.framework' (x86_64).
【问题讨论】:
-
这通常发生在构建过程在剥离正在构建的 dSYM 的二进制文件之后构建 dSYM 时。命令“image list QTWidgets”将显示它找到的 dSYM 的路径。您可以使用终端中的“dwarfdump”工具查看 dSYM,但如果它没有说它是空的,我会感到惊讶。但听起来您需要联系组成您拥有的发行版的任何人,并让他们正确构建 dSYM。
-
我找到了 dSYM 包,它确实包含一个带有所有必要符号的 _debug 版本。如果我运行
lldb QtWidgets.framework/Versions/5/QtWidgets_debug,它会找到该库的正确调试符号,但它会加载其依赖项的发布版本而不是调试版本(QtCore和QtGui而不是QtCore_debug和QtGui_debug)。似乎所有文件都在它们应该在的位置,但我无法让 lldb 加载调试版本。 -
您应该使用 DYLD_IMAGE_SUFFIX 环境变量来让 dyld 加载库的其他变体。查看“man dyld”以获取更多信息。您可以在传递给您正在启动的进程的环境中使用 lldb
env命令进行设置,也可以在 Xcode 中通过在项目的“运行”方案中进行设置。 -
我进行了编辑以包含有关我尝试使用 DYLD_IMAGE_SUFFIX 的更多信息。
-
对不起,我错过了原始描述中关于 DYLD_IMAGE_SUFFIX 的评论。请注意,lldb 并没有详尽地确定系统在运行之前实际加载的内容。除其他外,它不模拟 DYLD_IMAGE_SUFFIX 的效果。它也没有得到所有的 RPATH 技巧。在某些时候,这是一种收益递减的努力,因为当你跑步时,一切都会得到解决。所以你的第二个实验没有成功也就不足为奇了。
标签: c++ macos qt debugging lldb