我认为这是更好地发布的版本的软件,该软件开发人员实际测试;因此,我倾向于删除'debug'的目标从项目/生成文件,因此,只有一个版本,可以建立(和进行测试和调试,以及释放)。

出于类似原因,我不要用'的主张'(也见 是断言总是坏事? ...).

一个人没有辩称,原因'debug'版本,它更容易调试:但是,我反认为,你最终可能希望支持和调试什么这是你的释放,并因此需要建立一个释放它可以如果有必要调试...这可能意味着能够调试符号和禁用的一些优化,甚至在"释放"建立。

其他人说,"这是一个糟糕的想法";这是一个政策我演进的几年前被烧毁:

  • 一些开发商'的测试他们的调试但未释放的版本
  • 一些开发者'书写错误,显示仅在发行版
  • 该公司的释放的行版后的测试不足(这是 曾经 完全否充分?)
  • 正在调试行版

自那时以来,我们看到多个其他发展店按照这种做法(即没有单独的调试和发布建立).

你有什么政策?

有帮助吗?

解决方案

这可能是次要的,但它增加了为什么其他人所说的这里。一个优点是具有QA测试版是,随着时间的建立在调试和记录功能的软件将先由于需要开发人员需要弄清楚为什么事情会出错QA。

更多的开发人员需要调试版,更好的工具,只有当客户开始有问题。当然,没有理由开发工作上发布版本的一部分作为发展的循环周期。

还有,我不知道任何的软件公司具有足够长的周期得到开销的交换QA从调试,以释放生成一半通过一个版本的试验时期。具有做一个完整的QA周期是什么,太经常发生的情况很罕见。

其他提示

具有独立的调试和发布建立是一个很好的想法,因为它使发展更加容易。

但是,调试版本应用于发展,而不是进行测试。你的测试版只。你不用开发人员测试这些基础,可使用测试。

这是一个简单的政策,让这两个最好的世界,国际海事组织。

编辑: 在回应评论,我认为这是显而易见,调试和发布版本(可能)产生不同的代码。认为"-DDEBUG"与"-DNDEBUG",并"#如果定义("调试")",等等。

因此,它是至关重要的,你的测试的代码你结束了运费。如果你 产生不同的代码在调试和发布建立,这意味着测试的两倍--不管它是否是由同一个人。

调试符号没有那么大的一个问题,但是。总是建立与调试的符号,保留一份是二进制的,但是释放被剥二进制的。只要你签每个进制与建立一个数,不知怎的,你应该总是能够确定哪些是二进制相当于剥二,你必须试...

如何条文,并载的符号在你的调试器从外部来源平台相关的。

我们的政策是拥有开发人员的工作在调试版本,但其他人(QA、BAs、销售等)运行中释放的版本。昨天我已经修复了一个错误,仅仅出现在释放的建立,是显而易见的是什么被发生的事情只是因为它只出现在释放

这是第一个在这里,在这个商店,我一直在这里18个月左右。

事情变得毛茸茸的是释放时建立不同的事情要调试建立-是的,我已经向地狱和看到这在一些非常古老的,很粘稠的生产码。

我看不出有任何理由为什么不要有两个如果唯一的区别之间的配置调试符号和优化.

所以你需要建立一个释放它 你可以的,如果有必要调试...此 可能意味着能够调试的符号, 禁止一些优化,即使在 将"释放"建立。

嗯...这听起来像你在做一个调试建立以我...对吗?

你走错是这样的声明:

我认为这是更好地释放 软件版本的你 开发实际测试

开发商不要试探的代码。测试测试的代码。

你单元的测试,该测试 所有 建立配置。不要让你的开发工作,用一只手绑在后面他们回来-让他们使用的所有调试工具,他们在那里处置。A Debug build是其中之一。

关于断言:使用的主张极大地取决于你是否计划通过合同。如果你这样做,然后断言是仅仅检查合同在调试建立。

因为每次我回答的连接线,我们还使用同样的建立为调试和发布非常类似的原因。10%-20%的性能的收益的优化往往是很小的时候相比,手册在优化算法的水平。一个单一的建立消除许多潜在的错误。具体而言;

  • 未初始化变量和小缓冲溢出,可能最终具有非常不同的结果在调试和优化释放生成。

  • 即使象征性的信息,调试一个优化的释放可能很难作为对象不符合源,例如变量可能已经优化了和代码可以被重新安排。这样的错误报道在测试版,可以更加困难,因此耗费时间,以追查。

具有相比unoptimised和优化建立在自动回归测试,性能的收益提供的优化没有提供足够的额外价值,有两个建立在我的情况。它是可能值得注意的软件开发是非常CPU饥饿的(例如创建和操纵面大型号)。

当发展中Java,我讨厌非调试版本。当一个异常,你没有得到任何线信息,这使得很难或甚至不可能跟踪错误下来。还有,运行时间差异之间的调试和非调试约为5%,与Java5或更高,因此这是真的没有问题,并与今天的硬盘大小不重要了。

另一方面使用调试版本:

  • 堆的痕迹包含有所有你需要的信息
  • 变量可以检查
  • 如果你有一个问题的产生,你可以简单地将运行过程中不具有停止服务器第一,以安装一个调试版本。
  • 你不会被抓聪明的优化的错误
  • 该建立更简单的(只是一个神器)

开发人员的工作与调试版本,质量保证和其他人使用的版本中,我们称之为"生产"。主要优点是,在调试建立,我们可以添加大量的额外的代码和主张。一些对象包含额外的信息,没有使用,除了在观看时代码在调试器。一些对象验证自己的周期性,以确保所有国家信息是一致的。这些事情作出调试版本的慢得多,但他们帮助我们找到没有结束的错误那会是地狱里找到的生产建立。

正如我所说,我们所有的质量保证和性能测试使用的生产基础,而且我们也偶尔遇到的问题,显示了在生产但不是在调试。但是他们比较少见的,作为开发者的优点调试一试的建立而不是一个生产建立远远超过这一问题。

我认为它取决于项目的大小和是什么类型的建立系统和检测,使用。

如果你有一个自动化的建立系统的地方,这是简单的运行单元和功能测试在一定构建,然后你应该永远不会有任何问题建立多种类型。

我总是订的"船舶什么你在调试,因此可以调试什么你的船"的方法,为所有的原因列表中的问题。

在我看来这的讨论中缺少一个非常重要的一点:

这真的取决于什么样的项目。

如果创建了一个司机(C/C++)项目实际上将迫使创建调试版本,只是因为编译器优化可以使调试几乎不可能在一些情况。

如果创建网络应用程序的你可能不想只是有一个建立(虽然"建立"是而误导的对某些网络应用程序),可启用日志功能的一期间,运行时间。

虽然本地C++的项目和一个PHP网应用程序显然不是所有类型的项目,该项目存在,我希望我的观点了。

P.S.:当发展中C#你遇到一个边境情况,因为虽然使用"调试"建立禁止的编译器优化,在我的经验,你将不会遇到几乎一样多的差异作用C++

在这里,我们制定在调试模式和做所有单元的测试,在释放模式。我们是一个小店里只有几个(12岁以下)的应用程序,支持范围从传统的ASP,ASP.Net,VB.Net和C#。我们还有一个专门的人来处理所有的检测、调试的问题都扔回到开发。

我们始终建立两种,甚至从来没有被认为不这样做。使得调试选项会增加你的码尺寸和慢性能,可能不是一个问题与你的软件类型当测试,但是如果客户是在运行你的代码加5的其他应用程序...

该问题与测试可以通过采用自动化测试所以你释放建立可以毫不费力地进行测试时你以为你准备的释放。失败的开发商或公司正确地试验释放的建立不是一个失败的想法,释放和调试建立但在你的开发商或公司。

在您最后一点,我从来没有呼吁要调试一个释放的建立,只是为了解决它...

这是一个折衷。鉴于CPU是廉价和获得更便宜,而人类的周期中保持昂贵,它使大量的意义上保持只有一个版本的一个大型、复杂的程序--"调试"(gable)版本。

总是使用主张总是一个更安全的政策于从未使用他们。如果制造单独的调试和发布的版本,重新启用什么 #defined符号,你需要保证这一断言是在启用的版本。

我认为,代价是简单的:是的,只有一个释放的建立,你真正测试什么的实际运。另一方面,你所做的付出代价的调试你的开发商和/或性能的用户,所以这是给你检查这两种情况。

在大多数中型到大型项目,便于调试 确保一个更好的产品,为用户中结束。

看看这个 什么是你最有争议的程的意见?

引用:

意见:永远不会有不同 代码之间的"调试"和"释放" 建立

主要的原因被释放 代码几乎从来没有得到测试。更好的 有相同的码在运行测试 因为它是在野外。

通过删除"调试的目标",就是迫使开发商在调试行版本的软件。什么,probaly实际上意味着两件事情:

1)"释放的基础",将具有优化残疾人(otherwised开发人员不能使用一个调试器)

2)没有建立将具有特殊的预处理器宏改变它们的执行。

那么,你真的会这样做是合并释放和配置调试,而不是消除的仅仅是"调试"模式。

我个人已经做到了这一iOS发展具有不良影响。花费的时间量在我们编写的代码不到1%的什么是真正发生的事情,所以优化并不显着贡献。在这种情况下,他们确实似乎会增加错误的,但即使如果他们不想试验一种方法,那么给予质量保证与不同的代码介绍了只是一个要考虑的因素问题。

另一方面,有一些情况下,优化都是必要的,在那里他们是有用的,甚至在有足够的时间用于测试的两个。通常,变化之间的调试和释放都是那么的微小,它不会引起任何人的任何问题。

如果你已经有了一个真正的QA组谁能够充分测试的事情,我会说出调试版本,直到接近释放,然后再确保一个完整的QA周期做了相同的建立,这是走出大门。

虽然至少在一种情况下,我们释放的东西,仍然有一些调试码。唯一的后果是它跑了一点点慢和记录文件都非常大。

在我的公司我们有两个调试和发布。-开发人员使用的调试版本以正确地找到和解决的错误。-我们正在使用和所以我们有一个很大的测试,即我们在我们的服务器试验两种调试和发布建立的配置以及64/32建立我们。

因此,如果使用"调试"的配置可以帮助开发人员找到更快的错误是没有理由不要使用它-当代码进入该服务器(须进一步测试)或审查我们使用的"发布"的一种。

我学会建立的发行版本。PDB文件很久以前这样我就可以调试行版。什么很多的程序往往会忘记的是,在运行调试版本,与所有优化转,你正在调试不同的程序。它可以表现得像发布版本(大部分),但它仍然是一个不同的程序于释放建设。

此外,调试释放建设是不是很困难的。如果你得到一个崩溃的垃圾场,你必须要能够做到这一点无论如何。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top