是什么通过调试构建和发布版本,区别和用途[复制]的意思(what does mean by debu

2019-06-26 21:40发布

可能重复:
调试/发布的区别

我想知道是什么的调试版本和发布版本的意思。 而这也正是两者之间的差异。

其中之一应该我用(我的意思是它们是每一个的合适的条件)。 而这实际上建立我使用知道如果让在Visual Studio中简单的C ++项目。[如果我不改变任何项目设置]

我问这个,因为我尽量让GUI使用wxwidges 2.9.4,他们给加需要的.lib的不同情况。 这些是

release ANSI static

debug ANSI static

release Unicode static

debug Unicode static

请把详细的解答。

Answer 1:

调试构建和发布版本只是名字。 他们没有任何意义。

根据您的应用程序,你可以在一个,两个或两个以上不同的方式建造它,使用的编译器和连接选项的不同组合。 大多数应用程序只应建立一个版本:您测试和调试正是客户端使用相同的程序。 在某些情况下,它可能是更实际使用两个不同的构建:总体来说,客户端代码需要优化,性能方面的原因,但在调试的时候,你不想要的优化。 再有,其中完整的调试(即迭代器验证等)可能会导致代码,即使是算法调试太慢了,所以你必须有完整的调试检查构建,一个没有优化的情况下,但没有迭代器调试,和一个与优化。

任何时候你开始一个应用程序,你必须决定你需要什么选项,并创建相应的版本。 你可以打电话给他们任何你想要的。

至于外部库(如wxWidgets的):所有的编译器有一些不兼容当使用不同的选项。 那么,谁(以源代码形式以外)提供图书馆人必须提供几个不同的版本,这取决于一些问题:

  • 释放与调试:发行版本将被编了一套或多或少标准的优化选项(没有迭代器调试); 调试版本没有优化,并与迭代器调试。 无论迭代器调试存在或不存在是一回事,通常破坏二进制兼容性。 该库供应商应记录哪些选项是每个版本兼容。

  • ANSI对Unicode的:这可能意味着窄char VS宽wchar_t字符数据。 使用过其中一个对应于您在应用程序中使用的东西。 (请注意,这两者之间的差异不仅仅是一些编译器开关更多您经常需要完全不同的代码,并正确地在所有情况下处理Unicode是远离琐碎;从而真正支持Unicode必须知道的东西像合成用字符的应用程序或双向写作。)

  • 静态还是动态的:这决定了库如何链接和加载。 通常情况下,你会想要静,至少如果你对其他机器比你开发它的一个部署应用程序数量。 但是,这还取决于许可问题:如果您需要在库部署每台机器的许可证,它可能会更有意义使用动态。



Answer 2:

在做一个DEBUG建设项目被设置为不优化(或只有非常轻微优化)生成的代码,并告诉编译器添加调试信息(包括有关函数,变量和调试所需的其他信息)。 预处理器被设置为限定所述_DEBUG宏。

一个RELEASE ,另一方面构建具有优化的更高水平,并没有调试信息保存。 预处理器被设置为限定所述NDEBUG宏。

另一个区别是,某些“系统”的宏,例如ASSERT般宏,做不同的事情取决于如果_DEBUGNDEBUG被定义。 ASSERT确实没有在发布版本,但不检查和中止在调试版本。

之间的差Unicode和非Unicode多半是UNICODE预处理器宏,它告诉头文件,如果某些功能的Unicode应该启用与否。 一件事是, TCHAR将被定义为wchar_t在Unicode版本,但由于char在非Unicode版本。



Answer 3:

在调试版本,你得到了很多错误checjking,所以如果出了问题,你可能会得到更翔实的消息(这将运行得更慢)

在调试版本,当你在调试器下运行它,你会得到更多的信息。

如果你可以告诉编译为调试版本通过查看项目属性的预处理器定义:_DEBUG将被定义。

您将发布版本发送到您的客户。 (调试版使用中不存在于大部分非开发机器调试库)



Answer 4:

如果你想要一个静态库链接到一个项目,它需要与您用来编译代码相同的设置进行编译。 这就是为什么有一个调试和库的发布版本。 此外,你需要指定你是否要使用Unicode或ANSI。 在这里,答案很简单(在我看来) - 只使用unicode。

相对于调试,使他们不能混用是什么版本有什么不同? 主要是它的内存管理。 在调试内存管理做了很多额外的东西,让你及早发现错误。 作为一个例子,存在可以对代码重写进行检查金丝雀。 未初始化的内存与特定模式初始化,......此外,还有在放出大量优化未在调试使用。 这使得发行跑得更快,但让人难以调试代码。 方法可能会被优化掉,而是被内联,传球参数可优化使用寄存器,...

因此,在C ++中可以管理(至少)2级的配置。 一个调试配置,您与调试库链接。 这是一个用于开发和测试。 和释放配置与版本库链接。 这一个是交付。 但是,不要忘记,你需要测试版本,以及它可能会表现得比调试配置不同。



文章来源: what does mean by debug build and release build, difference and uses [duplicate]