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