关于如何判断程序和类库是Debug 还是 Release 的问题

在发布程序时不小心把一部分Debug的dll文件和一部分Release的dll文件混合发布了,最后导致整个生产环境瘫痪(内存和cpu使用量很高,同时网站访问无响应)。到现在我还搞不懂为什么会这样,也许是代码中有些地方用了一下比较不稳定的东西,也或许是dotnet的framework在Debug和Release混合下就会发生问题。但是就解决问题角度来说,最快速的应该是把这堆混合后的dll文件再次区分开,然后重新发布一个统一了版本的dll。

isDebug
http://www.sliver.com/dotnet/IsDebug/作者有一个用于做这方面检测的程序isDebug。这个程序能分辨exe和dll文件是Debug 还是 Release 。但是该程序不是十分准确,部分的dll不能真实分辨,而且只适合使用在dotnet程序下。ps:本程序的作者就是Reflector的作者。

也谈判断一个程序是Debug 还是 Release 的一篇文章里面找到了另一个判断程序是否Debug的方法。该方法是直接通过读取程序文件中的标记来作判断的,因此该方法合适使用在各种执行文件和类库上。其结果也比isDebug准确,很多isDebug分辨错误的,它也能准确分辨。
其核心代码如下:

Code

因此我使用该方法做了一个类似isDebug的程序。下载
该程序还有两个主要的问题:
1、对可执行文件和类库只使用后缀作判断,总觉得这很不妥;
2、没有找到判断托管执行文件和非托管文件的办法。

 最后说一下前面提到的系统瘫痪,Debug和Release混合不是这个问题的根源,而一般仅仅是导火线。

posted on 2008-02-19 09:48  baoli  阅读(1120)  评论(0编辑  收藏  举报

导航