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