日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時間:2025/4/16 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于如何判断程序和类库是Debug 还是 Release 的问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在發(fā)布程序時不小心把一部分Debug的dll文件和一部分Release的dll文件混合發(fā)布了,最后導(dǎo)致整個生產(chǎn)環(huán)境癱瘓(內(nèi)存和cpu使用量很高,同時網(wǎng)站訪問無響應(yīng))。到現(xiàn)在我還搞不懂為什么會這樣,也許是代碼中有些地方用了一下比較不穩(wěn)定的東西,也或許是dotnet的framework在Debug和Release混合下就會發(fā)生問題。但是就解決問題角度來說,最快速的應(yīng)該是把這堆混合后的dll文件再次區(qū)分開,然后重新發(fā)布一個統(tǒng)一了版本的dll。

isDebug:
在http://www.sliver.com/dotnet/IsDebug/作者有一個用于做這方面檢測的程序isDebug。這個程序能分辨exe和dll文件是Debug 還是 Release 。但是該程序不是十分準(zhǔn)確,部分的dll不能真實分辨,而且只適合使用在dotnet程序下。ps:本程序的作者就是Reflector的作者。

在也談判斷一個程序是Debug 還是 Release 的一篇文章里面找到了另一個判斷程序是否Debug的方法。該方法是直接通過讀取程序文件中的標(biāo)記來作判斷的,因此該方法合適使用在各種執(zhí)行文件和類庫上。其結(jié)果也比isDebug準(zhǔn)確,很多isDebug分辨錯誤的,它也能準(zhǔn)確分辨。
其核心代碼如下:

Code
?1String?szName?=?filePath;?
?2????????????FileStream?fs?=?null;?
?3????????????BinaryReader?r?=?null;?
?4????????????bool?bDebug?=?false;?
?5
?6????????????try?
?7????????????{?
?8????????????????fs?=?new?FileStream(szName,?FileMode.Open,?FileAccess.Read);?
?9????????????????r?=?new?BinaryReader(fs);?
10
11????????????????fs.Seek(0x3c,?SeekOrigin.Begin);?//?pe?heaher?offset?
12????????????????int?i?=?r.ReadInt32();?
13
14????????????????fs.Seek(i?+?0x18,?SeekOrigin.Begin);?//?magic?number?offset?
15????????????????int?iMagicNumber?=?r.ReadInt16();?
16????????????????if(iMagicNumber?==?0x010b)?
17????????????????{?
18????????????????????//?pe32?
19????????????????????fs.Seek(i?+?0xa8,?SeekOrigin.Begin);//?debug?data?directories?info?offset?
20????????????????}
?
21????????????????else?if(iMagicNumber?==?0x020b)?
22????????????????{?
23????????????????????//?pe32+?
24????????????????????fs.Seek(i?+?0xb8,?SeekOrigin.Begin);//?debug?data?directories?info?offset?
25????????????????}
?
26
27????????????????else?
28????????????????{?
29????????????????????throw?new?SystemException("impossible!?nnd,?it?is?not?a?pe?file!?fk?u");?
30????????????????}
?
31
32????????????????bDebug?=?r.ReadInt32()?!=?0;?
33????????????}
?
34????????????catch(SystemException?e)?
35????????????{?
36????????????????Console.WriteLine(e.Message);?
37????????????}
?
38????????????finally?
39????????????{?
40????????????????if(fs?!=?null)?
41????????????????{?
42????????????????????fs.Close();?
43????????????????}
?
44
45????????????????if(r?!=?null)?
46????????????????{?
47????????????????????r.Close();?
48????????????????}
?
49????????????}
?

因此我使用該方法做了一個類似isDebug的程序。下載
該程序還有兩個主要的問題:
1、對可執(zhí)行文件和類庫只使用后綴作判斷,總覺得這很不妥;
2、沒有找到判斷托管執(zhí)行文件和非托管文件的辦法。

?最后說一下前面提到的系統(tǒng)癱瘓,Debug和Release混合不是這個問題的根源,而一般僅僅是導(dǎo)火線。

轉(zhuǎn)載于:https://www.cnblogs.com/baoli/archive/2008/02/19/1073108.html

總結(jié)

以上是生活随笔為你收集整理的关于如何判断程序和类库是Debug 还是 Release 的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。