This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Hercules IAR工程“Debug”和“Release”的区别

您好!在IAR下编译Hercules工程,debug和release两种模式有何区别?生产的.out文件.map等文件有啥区别?

  • DEBUG 版本里会包括基本的调试信息,供开发和调试使用;而 RELEASE 版本不会包括调试信息,一般是发布给用户使用。所以DEBUG 版本的 SIZE 比 RELEASE 版本会大许多。另外,RELEASE 版本在编译链接的时候检查会更严格,所以有时候会出现 DEBUG 版本能使用,而 RELEASE 版本却会出现一些问题的情况。

    更详细信息您可以点击下面的链接,希望对您有所帮助!

    d1.amobbs.com/.../ourdev_719153UVFK03.pdf
  • Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等。习惯上,我们仍然更愿意使用VC已经定义好的名称。
    Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至数M)。至于是否需要DLL支持,主要看你采用的编译选项。如果是基于ATL的,则Debug和Release版本对DLL的要求差不多。如果采用的编译选项为使用MFC动态库,则需要MFC42D.DLL等库支持,而Release版本需要MFC42.DLL支持。Release不对源代码进行调试,不考虑MFC的诊断宏,使用的是MFC Release库,编译时对应用程序的速度进行优化,而Debug则正好相反,它允许对源代码进行调试,可以定义和使用MFC的 诊断宏,采用MFC Debug库,对速度没有优化。
    既然Debug和Release仅仅是编译选项的不同,那么为什么要区分Debug和Release版本呢?
    Debug和Release,在我看来主要是针对其面向的目标不同的而进行区分的。Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序调试能力。而Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。

    下面仅就默认的Debug和Release版本的选项进行 比较,详细的编译选项可以看MSDN的说明。
    我们将默认的Debug和Release的选项设置进行比较,过滤掉相同设置,主要的不同如下:
    编译选项:/Od /D "_DEBUG" /Gm /RTC1 /MDd /Fo"Debug““" /ZI
    链接选项:/OUT:"D:“MyProject“logging“Debug“OptionTest.dll" /INCREMENTAL
    Release设置:
    编译选项:/O2 /GL /D "NDEBUG" /FD /MD /Fo"Release““" /Zi
    链 接选项:/OUT:"D:“MyProject“logging“Release“OptionTest.dll" /INCREMENTAL:NO
  • 因此,开发阶段需要进行调试测试的,需要采用debug生成的代码。如果确认没问题了,最终烧录用的就是release.
  • 您好!

    但之前碰到过Debug下编译没问题,Release下编译就出一大堆错误,这种情况该如何应对?如何查问题?(IAR编译器下)

    谢谢