jbc*_*coe 15 c++ debugging macos debug-symbols
我有一个简单的项目,我想调试想生成带调试符号的dSYM文件夹.
运行:
clang++ -std=c++14 -stdlib=libc++ -g -o Lazy Lazy.cpp
像我期望的那样创建Lazy.dSYM.
然而:
clang++ -std=c++14 -stdlib=libc++ -g -c Lazy.cpp
clang++ -stdlib=libc++ -g -o Lazy Lazy.o
Run Code Online (Sandbox Code Playgroud)
不创建Lazy.dSYM(似乎符号嵌入在二进制文件中).
遗憾的是,两步构建是我修改后的makefile所做的.如何从两阶段编译和链接构建生成Lazy.dSYM?
我不需要 dSYM目录,只需调试符号,但想了解它的创建时间和原因.
Ken*_*ses 17
.dSYM包的创建由一个名为的工具完成dsymutil.当Apple添加对DWARF调试信息的支持时,他们决定将"可执行链接"与"调试信息链接"分开.因此,调试信息链接不是由普通链接器完成的,而是由它完成的dsymutil.
为方便起见,当您一步构建程序时,编译器dsymutil将代表您调用.那是因为它知道它拥有所有输入.如果将-v(aka --verbose)选项添加到compile命令,您将看到dsymutil它作为最后一步的调用.
但在其他情况下,它并没有这样做.它为用户手动完成调试信息链接步骤.您可以通过发出命令来完成:
dsymutil <your_program>
Run Code Online (Sandbox Code Playgroud)
这是Apple工程师的一篇文章,他帮助设计和实现了Apple对DWARF的支持,解释了他们的想法.他还在Stack Overflow上回答了关于这个问题的问题.