dsymutil
手册页指示dsymutil
有一个名为--flat
的选项,它将创建一个扩展名为.dwarf
的单个文件调试包。我尝试了一下,虽然确实创建了预期的.dwarf
文件,但似乎没有lldb
实际加载它们,这与生成常规.dSYM
目录不同。除了手册页上的内容外,我找不到大量的文档。
是否有针对此类文件的预期方案,或者这是很久以前遗留下来的不再应使用的东西了?
之所以吸引人,是因为作为一个文件,它在构建系统中更易于管理,而不是需要管理生成的.dSYM
目录。
$ cat > hello_world.cpp
#include <iostream>
int main() {
std::cout << "Hello, World\n";
return 0;
}
$ clang++ ./hello_world.cpp -g -c -o hello_world.o
$ clang++ ./hello_world.o -o hello_world
$ dsymutil ./hello_world
$ tree ./hello_world.dSYM
./hello_world.dSYM
└── Contents
├── Info.plist
└── Resources
└── DWARF
└── hello_world
$ lldb hello_world
(lldb) target create "./hello_world"
Current executable set to './hello_world' (x86_64).
(lldb) image list
[ 0] 7984B8FE-1C4E-3468-9819-C3BE4E50456D 0x0000000100000000 .../hello_world
.../hello_world.dSYM/Contents/Resources/DWARF/hello_world
$ \rm -rf hello_world.dSYM
$ dsymutil --flat ./hello_world
$ file hello_world.dwarf
hello_world.dwarf: Mach-O 64-bit dSYM companion file x86_64
(lldb) target create "./hello_world"
Current executable set to './hello_world' (x86_64).
(lldb) image list
[ 0] 7984B8FE-1C4E-3468-9819-C3BE4E50456D 0x0000000100000000 .../hello_world
[ 1] F217F7F8-A795-3109-B77F-B1E2277F3E3B 0x0000000000000000 /usr/lib/dyld
如您所见,lldb
很高兴自动找到并加载.dSYM
,但对于.dwarf
文件版本却没有这样做。
是否有办法使lldb
加载这些文件,或者更好的是自动加载它们?其他工具?是否需要其他步骤来将可执行文件“链接”到.dwarf
文件,就像--add-gnu-debuglink
的类似物?还是dsymutil --flat
确实没有得到支持并应避免?有任何用例吗?
答案 0 :(得分:1)
实际上不支持--flat
选项。它存在于测试中,通常我们要检查生成的DWARF,而不是应该始终相同的dSYM捆绑结构。