时间: 2025-01-25 03:57:31 | 作者: 华体会app怎么样
,一些IDE会默认创建 Release和Debug 两个目标工程。 今天就来讲讲
这个细节往往容易被忽视。在现场技术上的支持时也经常会发现,在没有弄清楚区别的情况下,轻易造成出现错误。
比如使用debug版本产生的bin文件提交测试。程序中有很多方便调试用的ASSERT()函数。此函数编译时可能会包含文件夹绝对路径信息,导致在不同的电脑上编译后,产生bin文件不同。从而引起测试和生产程序管理的混乱。
Debug:Debug通常称为调试版本。通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不希望做优化,便于程序员调试程序。
Release:Release通常称为发布版本。是为量产做准备的。一般客户不允许在发布版本上进行调试。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。
实际上,Debug和Release并没有本质的界限,他们只是一组编译选项的集合,编译器只是按照预定的选项行动。事实上,我们还可以修改这些选项,从而得到优化过的调试版本或是带跟踪语句的发布版本。
比如常见的printf(打印信息),会通过“DEBUG”调试信息打开/关闭打印输出信息。
大多数断言都只在Debug版中才会被编译,而在Release版中被忽略。唯一的例外是VERIFY()。事实上,这些宏都是调用assert()函数,只不过附加了一些与库有关的调试代码。如果你在这些宏中加入了任何程序代码,而不只是布尔表达式(例如赋值、能改变变量值的函数调用等),那么 Release 版都不会执行这些操作,从而造成错误。
调试后,能够最终靠在包含#include的语句之前插入#define ndebug来禁用断言调用。
遇到Debug成功但Release失败,显然是一件很沮丧的事,而且往往无从下手。如果你看了以上的分析,结合错误的具体表现,很快找出了错误,固然很好。但如果一时找不出,以下给出了一些策略:
前面已经提过,Debug和Release只是一组编译选项的差别,本质上很难区分差别。我们大家可以修改Release版的编译选项来缩小错误范围。如上所述,可以把Release的选项逐个改为与之相对的Debug选项,或运行时间优化改为程序大小优化。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。举报投诉
的搭建主要涉及两个软件:烧写软件和编写软件一、烧写软件:STC-ISP这个软件可以在STC的官网下载得到: link....
内部ROM达到64K或更大,已经具备系统编程功能,这也逐步推动了C语言在
大家好,我是张巧龙,今天给大家伙儿一起来分享一篇文章,不同工作年限的工程师究竟是哪里不同?1. 基础知识一个嵌入式工程师,很多都是从51
诞生于20世纪70年代末,它是指一个集成在一块芯片上的完整计算机系统。它包括CPU、内存、内部和外部总线系列、PIC
Arduino和STM32各自的特点是什么?STM32和Arduino
本帖最后由 eehome 于 2013-1-5 09:49 编辑 USB 2.0与 USB 3.0功能特性
采用哈佛结构,具有较多的寄存器和指令,能轻松实现高效的数据处理和通信功能。而MCS-51
Python在国内逐渐崛起和被追捧的原因?用Python可以做什么?几款主流的Python
常用的嵌入式操作系统是什么?Linux OS/palm OS与Windows CE
嵌入式操作系统EOS具有什么特点常用的嵌入式操作系统是什么?Linux OS与Windows Ce
了三种正弦波脉宽调制(SPWM)操控方法,指出各自的优缺点及应用,给出了一些数学
工业抗干扰性强,各个型号的兼容性强;AVR最新的MEGA系列工作速度快。各种
两个版本(工程目标),比如VS(VC)、IAR等。 有些小伙伴比较纳闷,