Xcode调试和发布模式的区别

44
在Cocoa应用程序中,调试版本和发布版本有什么区别?我知道调试版本包含用于调试的额外信息,但还有什么其他不同之处吗?
2个回答

54

我引用:

“这两者之间最大的区别是: 在调试 build 中,完整的符号调试信息被发出以帮助调试应用程序,同时不考虑代码优化。 而在发布 build 中,不会发出符号调试信息并且对代码执行进行了优化。 此外,因为在发布 build 中未发出符号信息,因此最终可执行文件的大小比调试可执行文件小。

可以预期,在发布 build 中由于编译器优化或内存布局或初始化差异而出现有趣的错误。这些通常被称为 Release-Only 错误:) 就执行速度而言,发布可执行文件肯定会更快,但并非总是有显著的差异。”

感谢 Google 和用户 mcdeeiis http://haacked.com/archive/2004/02/14/difference-between-debug-vs-release-build.aspx

对于所有编程语言来说,这是一个相当扎实的解释。


3
感谢Ross Alexander提供的链接,它解释了在调试模式下会生成一些符号调试信息,这究竟意味着什么,如何查看这些信息,是否有助于排除错误,如果有的话如何利用它进行调试和清除错误,并能否举例说明。 - pradeepa
3
符号调试信息:将二进制信息与源代码链接起来的信息。例如行号、变量名称等,可以让您在调试代码时参考源代码。当然,在调试方面这很有帮助,但您可能没有意识到已经在使用此信息 :) 我认为您可以在发布模式下开启此选项,同时在Xcode设置中进行设置,但请不要引用我 :P,因为我现在不在Xcode面前。 - Candyfloss
我可能需要学习编译器设计才能理解这些东西,无论如何感谢你。 :) - pradeepa
1
在发布代码中包含调试符号是没有必要的。如果您使用了Build&Archive,Xcode组织者可以为您解析崩溃日志。 - Matthias Bauch
@Matthias: 那些没有调试信息的构建所生成的符号化崩溃日志不包含行号,因此它们比包含调试信息的构建所生成的崩溃日志要不实用得多。 由于最终用户设备上自然发生的崩溃通常发生在发布版本中,因此最好将发布版本与调试信息一起构建 - 与仅发布调试版本的区别仍然是优化设置。 - Kaiserludi
显示剩余3条评论

3
发布版的性能更优化,大小更小。同时,通过个人实践,我可以说,在发布配置中开启更多警告是有用的,以便知道哪些方法没有被使用,哪些方法没有声明,而签名/无符号正在进行比较,以及其他有用的信息。

1
为什么你在调试模式下也不打开那些警告呢? - Cody Gray
由于它们更注重细节而非功能,对我来说,拥有无警告的代码是很好的。 - Eimantas
1
我更喜欢在Release模式下拥有无警告的代码。这比在Debug模式下更重要。如果我先在Debug模式下修复了错误,那么当我切换到Release模式时,它们就会消失。更重要的是,“啰嗦”的问题表明您的代码存在设计缺陷 - 您需要在设计/调试时间解决这些问题,而不是在准备测试/发布时才解决。 - Cody Gray
2
他们很严谨,因为他们想向你发出一些(潜在的)问题信号,这些问题你应该解决。如果你在开发过程中打开它们,大多数情况下它们很容易修复,一旦它们第一次出现。 - DarkDust

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接