版本:
我使用的開發工具是VS2005, 自帶的是 DotFuscator Community Edition.
版本號是:3.0.2005.16132
S/N: 000-00-000-391
版權資訊是:2002-2005 PreEmptive Solutions
問題簡要描述:
線上程中操作的物件會突然消失。 非常非常的嚴重。簡單可以看下面一個模型:
class Person
{
private Tools tool;
}
在一個內部類person裡面,有一個內部域(Field) tool。如果這個類放在一個不斷迴圈的執行緒裡面,那麼tool會不定期、沒有原因的消失。
這種執行緒包括了:asp.net的連結操作、Thread操作、非同步操作。
問題發現過程
開始的時候我以為是自己的水平問題,程式碼沒有寫好,但是反覆的debug並沒有發現任何問題。
後來我嘗試使用沒有混淆的程式碼和混淆的程式碼,明顯混淆的程式碼經常報空指標的錯誤。
天啊!!!是空指標!!這個是debug裡面最噁心的錯誤! 我看見NullPointReference的錯誤,每位程式設計師都會感到噁心的。
後來為了驗證問題,我使用了AOP,對一個類的所有public方法進行了檢視,每次呼叫除了列印傳入、傳出引數,還列印類內部的field值。
經過1小時的日誌跟蹤,發現:
1. 如果這個類沒有被操作,那麼內部資料不會丟失。
2. 如果出現了新的執行緒(以上所說的)後,內部物件丟失。
3. 如果執行緒是一個長時間的操作(例如插入10w條資料記錄) ,大概在3000條的時候會不定期的發生內部物件丟失。
因此再次告訴各位程式設計師,千萬千萬不要使用dotfuscator,後果非常的嚴重!!!!!已經導致我的業務資料丟失了幾次了。損失慘重!
也希望如果有好的程式碼混淆軟體,推薦一下。畢竟,客戶端部署在外部,內部的加密演算法是不能夠隨便暴露的。
備註一下:
我現在正在和 PreEmptive 公司聯絡,希望他們對這個問題做出正確的解釋。有資訊會立刻放上來。