关于如何判断程序和类库是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分辨错误的,它也能准确分辨。
其核心代码如下:
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
1
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/assets/blank.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/assets/blank.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/assets/blank.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/assets/blank.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
34
![](/Images/OutliningIndicators/None.gif)
35
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/assets/blank.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
38
![](/Images/OutliningIndicators/None.gif)
39
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/assets/blank.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/assets/blank.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/assets/blank.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
49
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
因此我使用该方法做了一个类似isDebug的程序。下载
该程序还有两个主要的问题:
1、对可执行文件和类库只使用后缀作判断,总觉得这很不妥;
2、没有找到判断托管执行文件和非托管文件的办法。
最后说一下前面提到的系统瘫痪,Debug和Release混合不是这个问题的根源,而一般仅仅是导火线。
转载于:https://www.cnblogs.com/baoli/archive/2008/02/19/1073108.html
关于如何判断程序和类库是Debug 还是 Release 的问题相关推荐
- 判断dll是版本(Debug Or Release)[测试通过]
简单的代码,google搜索提炼和分析,主要是利用反射技术,测试通过,抛砖引玉,自娱自乐,多多指教. public partial class _Default : System.Web.UI.Pag ...
- iOS中判断程序是不是第一次运行(新手引导界面用)
2019独角兽企业重金招聘Python工程师标准>>> 在软件下载安装完成后,第一次启动往往需要显示一个新手操作引导,来告诉用户怎么操作这个app,这就需要在程序一开始运行就判断程序 ...
- 【转】程序debug正常release错误
原文:http://hi.baidu.com/leggle/blog/item/ec0c2e5400c3ed5dd10906a7.html 呵呵,Iris来了!由于最近所做项目接近尾声,想在relea ...
- 判断程序是否运行在虚拟机中的代码
首先我们要了解一下什么是虚拟机, 对虚拟机的通用解释是通过软件模拟的具有完整硬件系统功能的, 运行在一个完全隔离环境中的完整计算机系统. 通过虚拟机软件, 你可以在一台物理计算机上模拟出一台或多台虚拟 ...
- Android之通过ActivityLifecycleCallbacks判断程序是否运行在后台
1.问题 判断程序是否运行在后台运行 2.解决办法 我们可以使用ActivityLifecycleCallbacks,对于ActivityLifecycleCallbacks,看我的这篇博客介绍() ...
- 如何判断exe文件是debug还是release编译生成的
如何判断exe文件是debug还是release编译生成的 结论: 用IDA工具打开exe,然后看Imports里面的依赖库是否有带d或D结尾的,如果有就说明是Debug的 实验:(实验环境 vs20 ...
- 判断程序是否已经运行
近段时间,需要写一个小功能,就是需要判断程序是否已经运行. 某个程序安装后,也许被多个用户运行.那怎样判断当前用户已经运行了此程序了呢? 下面是Insus.NET的做法,就是: <VB.NET ...
- [你必须知道的.NET]第三十五回,判断dll是debug还是release,这是个问题
问题的提出 晚上翻着群里的聊天,发现一个有趣的问题:如何通过编码方式来判断一个dll或者exe为debug build还是release build?由于没有太多的讨论,所以我只好自己找点儿办法,试图 ...
- 有经验的面试官都是如何快速判断程序员能力的?
程序员是一个技术含量特别高的职位,优秀的程序员对每个公司来讲同样可遇不可求.而这就需要技术面试官的火眼精金,为企业挖掘人才. 程序员面试者那么多,如何快速分辨他们的能力,为双方都节省时间和精力,也成为 ...
最新文章
- 关于学习Python之后的一点总结(1->符号优先级->for->range())
- Android JNI编程(六)——C语言函数指针、Unition联合体、枚举、Typedef别名、结构体、结构体指针...
- 高级开发必须理解的Java中SPI机制
- 蓝桥杯java第五届决赛第四题--排列序数
- 10048 mysql_MySQL 的 10048问题,如何解决?
- Smarty目录结构和子目录路径问题
- d3.js html显示图片,d3.js v4:如何在鼠标点击节点后显示图像
- iOS多线程编程的知识梳理
- 基于JAVA+SpringMVC+MYSQL的酒店旅游管理系统
- 数据库工作笔记008---pg_hba.conf entry for host “192.168.2.111”, user “gpadmin”, database “template1”, SSL
- 使用jquery.form.js实现form表单无刷新提交简单示例
- windows优化大师怎么用_软件不能用又卸载不掉怎么办——用Windows自家的卸载工具吧(dos级卸载)...
- (转)SQL Server当中生成一定范围的随机数
- FoxMail 查看邮件乱码
- 合伙人(GP) 有限合伙人(LP)是什么意思?
- 富文本编辑器:ckeditor(使用ckeditor4-vue)
- 2022年C等级考试九月二级真题E:反反复复
- 对「曲线拟合」和「最小二乘法」的个人理解
- 中国建设银行宣布:国内第一家无人银行,在上海正式开业!
- OpcEnum交互式用户不可选解决办法
热门文章
- android如何添加gif,Android加载Gif和ImageView的通用解决方案:android-gif-drawable(1)...
- boostrap 鼠标滚轮滑动图片_BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)...
- linux二进制文件构建mysql_MySQL安装系列:使用通用二进制文件在Unix/Linux安装
- php mail函数 附件,[php]mail函数发送邮件(正文+附件+中文)
- 安徽工业大学计算机考研调剂,安徽工业大学2019年考研预调剂公告
- 创建了联合索引还用在单个字段上创建索引吗_数据库 索引并不是万能的
- ubuntu字符界面login_Ubuntu字符界面输入密码始终提示错误 login incorrect 解决办法...
- Android WebView 和 javaScript的互相调用(二)
- vc2010中开始执行不调试灰的_反编译动态调试smali全过程
- linux usb摄像头 源码,Linux USB摄像头驱动实现源码分析