Cocoa应用程序的调试和发布版本之间有什么区别? 我知道调试版本包含用于调试的其他信息,但还有什么不同?
答案 0 :(得分:32)
调试版本将包含可供调试器使用的调试符号。发布版本通常不包含调试符号,因此如果您获得崩溃转储,您将获得的是一堆十六进制地址而不是有用的符号名称。
调试版本不是使用优化编译的(-O0
使用gcc编译),而版本编译是使用优化编译的(通常是-O2
或-O3
)。优化使调试变得更加困难。如果您尝试调试发布应用程序,调试器将变得非常困惑,因为汇编语句不再与HLL语句匹配,语句重新排序,函数内联,循环展开等等。
调试和发布版本还定义了不同的预处理器符号,并且某些代码是基于那些(例如,数组边界检查,断言等)进行有条件编译的,尽管这是高度依赖于应用程序的。一个典型的例子是#define NDEBUG
用于释放模式,这会导致断言被删除。
答案 1 :(得分:0)
在Tiger中,Debug版本是“零链接”。这是它仅针对您的环境进行了优化,并不是一个完整的构建。