2009-04-17 57 views

回答

31

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

调试版本没有通过优化进行编译(-O0 with gcc),而发布版本通过优化进行编译(通常为-O2-O3)。优化使得调试更加困难。如果你试图调试一个发布应用程序,调试器会变得非常困惑,因为汇编语句不再与HLL语句相匹配,语句得到重新排序,函数得到内联,循环得到展开等。

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

0

在Tiger中,调试版本是“零关联”的。这是它仅针对你的环境进行了优化,并不是一个完整的构建。

相关问题