Xcode/Cocoa:调试版本和发布版本之间有什么区别?

Xcode/Cocoa:调试版本和发布版本之间有什么区别?,cocoa,xcode,debugging,Cocoa,Xcode,Debugging,Cocoa应用程序的调试版本和发布版本之间有什么区别? 我知道调试版本包含用于调试的其他信息,但还有什么不同?调试版本将包含调试符号,可供调试器使用。发布版本通常不包含调试符号,因此如果您得到一个崩溃转储,您将得到的只是一堆十六进制地址,而不是有用的符号名 调试版本不使用优化编译(-O0使用gcc),而发布版本使用优化编译(通常是-O2或-O3)。优化使调试变得越来越困难。如果您试图调试发布应用程序,调试器将非常混乱,因为汇编语句不再与HLL语句匹配,语句被重新排序,函数被内联,循环被展开,等等

Cocoa应用程序的调试版本和发布版本之间有什么区别?
我知道调试版本包含用于调试的其他信息,但还有什么不同?

调试版本将包含调试符号,可供调试器使用。发布版本通常不包含调试符号,因此如果您得到一个崩溃转储,您将得到的只是一堆十六进制地址,而不是有用的符号名

调试版本不使用优化编译(
-O0
使用gcc),而发布版本使用优化编译(通常是
-O2
-O3
)。优化使调试变得越来越困难。如果您试图调试发布应用程序,调试器将非常混乱,因为汇编语句不再与HLL语句匹配,语句被重新排序,函数被内联,循环被展开,等等


调试和发布版本还定义了不同的预处理器符号,一些代码是基于这些符号有条件地编译的(例如,数组边界检查、断言等),尽管这高度依赖于应用程序。一个典型的例子是为发布模式定义NDEBUG,这会导致断言被删除。

在Tiger中,调试构建是“零链接的”。这是因为它只针对您的环境进行了优化,而不是真正的完整构建