2012-03-16 26 views
0

由于各种历史(和愚蠢的)原因,我已经被分配到一个大的遗留项目,它只能在调试版本中部署。正如人们所预料的那样,有一些的性能问题。如何优化调试DLL以最小化VC6中的调试检查?

该项目是写在C,Visual Studio 6(是的,那个旧)。我正在寻找方法来尽量减少“一切都在调试版本”的影响。是否有任何编译器或链接器选项可以最大限度地减少注入最终二进制文件的调试代码的数量?还是有一种外部公用事业可以在稍后剥去一些? (我知道这基本上是一个愚蠢的问题,我们应该改用释放,但相信我,这完全超出了我的控制范围。而且它几乎每天都会杀死我的灵魂的一部分。 )

回答

2

首先,您应该列出调试版本和发行版本之间的所有差异,并尝试确定可以更改的内容以及不能更改的内容。 然后只是改变你允许的所有事情。

从我的头顶,我如果没有记错的话:

  • 调试:链接与调试的DLL。 版本:与发布DLL链接。
  • 调试:编译时没有任何优化。 版本:使用所有优化进行编译。
  • 调试:用断言编译(-D_DEBUG)。 Release:无断言编译(-DNDEBUG)。
  • 调试:编译/链接调试符号。 版本:编译/链接不带调试符号(不会影响性能)。
  • 原始开发人员对项目配置进行的任意更改。

从所有这些,只有前两个应该真的能够有所作为。这个DLL是因为你依赖某个(愚蠢)原因的调试DLL。第二个是因为优化会导致程序中的微妙错误显示出来。

+0

感谢您的支持。显然,我不能做太多的事情。我有一个调试模块链接到其他调试模块,并且不能更改(不幸的是)。所以我想所有“相关”选项都不是真正可用的: - \ – 2012-03-16 16:32:23

+0

优化级别不应该取决于您所链接的内容。没有技术上的理由,即在启用优化的情况下编译所有未来的调试版本都会导致链接或运行时问题。 “执行”原因可能是另一回事。 – AShelly 2012-03-16 21:46:25

+0

正如我试图说的,并且更好地告诉我的,我列表中的每个子弹都独立于其他子弹,并且可以自行启用/禁用。如果重要的是链接到调试DLL,那么仍​​然可以在优化_your_代码的同时与未优化的代码进行链接。 – rodrigo 2012-03-17 00:35:15