我们都知道"调试模式"应该用于开发,因为编译器会生成更多的调试信息,并且"Release Mode"应该用于生产版本,因为编译器会生成优化的代码.
但是,假设您正在制作仅在组织内部使用的软件,并且代码性能不是一个大问题,因为该软件需要执行大量文件I/O和数据库查询.在这种情况下,我很想在"调试模式"下发布软件,因为这些额外的调试信息使得将来的维护变得更加容易.
在这种情况下,是否还有任何令人信服的理由在发布模式下发布软件?
小智 29
我能想到的两个问题:
调试版本通常会向缓冲区添加填充.这就是为什么有时你得到的程序似乎在调试中工作但在发布时崩溃.看似是这里的有效词,因为缓冲区溢出只是一个等待发生的事故.
调试版本中发生了奇怪的事情.我曾经在一个长期运行的应用程序上工作,每20天左右会崩溃一次.事实证明,在C运行时,每次执行malloc/free时,计数器(用于辅助调试)都会递增.如果柜台碰巧溢出 - kaboom!仅仅因为这个原因,我永远不会建议任何人部署调试二进制文件 - 你永远不知道可能会有什么惊喜等待你的客户.
Sha*_*ell 15
可能的原因:
更新:4.正如所指出的,链接器性能,但我认为将在列表中:p与调试编译相比,您发布了多少次产品?
如果你愿意放弃上述内容,那么就没有真正的理由.
Mar*_*las 10
您要问的一个事实表明您希望利用调试模式的好处.如果这些好处超过你的道德内疚,那么我说继续做下去.这些好处可能是机械的和信息性的,并且与您的工作相关,而缺乏内疚并不能真正帮助您生产出更好的软件.它可能会帮助你睡得更好,但是谁在乎呢?
我没有任何个人反对在内部发布Debug版本,前提是它有效(一些Debug版本不能在非开发机器上工作,而且还安装相应的调试库...当我编写C++时遇到过这种情况/ MFC代码).
稍微复杂一点的方法是使用符号服务器,一个由构建过程自动更新符号的符号服务器.
如果您正在从客户端的计算机上调试问题,请将轻量级调试器指向您的符号服务器(确保版本匹配),然后开始调试.