在调试模式下发布软件有什么问题吗?

osc*_*kuo 35 debugging

我们都知道"调试模式"应该用于开发,因为编译器会生成更多的调试信息,并且"Release Mode"应该用于生产版本,因为编译器会生成优化的代码.

但是,假设您正在制作在组织内部使用的软件,并且代码性能不是一个大问题,因为该软件需要执行大量文件I/O和数据库查询.在这种情况下,我很想在"调试模式"下发布软件,因为这些额外的调试信息使得将来的维护变得更加容易.

在这种情况下,是否还有任何令人信服的理由在发布模式下发布软件?

小智 29

我能想到的两个问题:

  1. 调试版本通常会向缓冲区添加填充.这就是为什么有时你得到的程序似乎在调试中工作但在发布时崩溃.看似是这里的有效词,因为缓冲区溢出只是一个等待发生的事故.

  2. 调试版本中发生了奇怪的事情.我曾经在一个长期运行的应用程序上工作,每20天左右会崩溃一次.事实证明,在C运行时,每次执行malloc/free时,计数器(用于辅助调试)都会递增.如果柜台碰巧溢出 - kaboom!仅仅因为这个原因,我永远不会建议任何人部署调试二进制文件 - 你永远不知道可能会有什么惊喜等待你的客户.


Sha*_*ell 15

可能的原因:

  1. 通常不会针对性能编译调试
  2. 调试应用程序大小(通常)比发布编译大很多.
  3. 如果有人试图对您的应用程序进行逆向工程(无论出于何种原因),那么它就变得容易多了

更新:4.正如所指出的,链接器性能,但我认为将在列表中:p与调试编译相比,您发布了多少次产品?

如果你愿意放弃上述内容,那么就没有真正的理由.


Mar*_*las 10

您要问的一个事实表明您希望利用调试模式的好处.如果这些好处超过你的道德内疚,那么我说继续做下去.这些好处可能是机械的和信息性的,并且与您的工作相关,而缺乏内疚并不能真正帮助您生产出更好的软件.它可能会帮助你睡得更好,但是谁在乎呢?


Ala*_*son 5

我猜这里安装的调试代码比我们(开发人员)愿意承认的要多得多.

就个人而言,我知道许多生产系统部署到客户,其代码是在调试模式下编译的.


Gar*_*ett 5

我没有任何个人反对在内部发布Debug版本,前提是它有效(一些Debug版本不能在非开发机器上工作,而且还安装相应的调试库...当我编写C++时遇到过这种情况/ MFC代码).

稍微复杂一点的方法是使用符号服务器,一个由构建过程自动更新符号的符号服务器.

如果您正在从客户端的计算机上调试问题,请将轻量级调试器指向您的符号服务器(确保版本匹配),然后开始调试.