2014-11-23

[AS3] 關於私有類別參數名稱與release編譯混淆問題

開發環境: FlashDevelop + AIR SDK 15
問題:存入私有類別的屬性值與實際寫入位址不一致
解決方式:更改此私有類別命名使其為唯一



最近開發的一個AIR專案出現了一個詭異的狀況,
原本在debug模式輸出下執行都一切正常,
但到了release輸出後都會在執行特定動作時應用崩潰Crash(無預警自動關閉),
且因為是release模式所以除錯特別麻煩,
經過多次切割分析後,
發現在使用私有類別(定義於類別檔中的不公開類別)參數存取時,
竟然會發生存入的類別屬性與實際寫入位址不一致。

例如定義一個私有類別為:
class GameRes {
public var fooA:String;
public var fooB:String;
}
在測試程式碼中將「字串"ABC"」寫入第一個參數 (fooA):
obj.fooA = "ABC";
結果在release輸出中 「字串"ABC"」居然被指定入了第二個參數(fooB)。

由於此類別所使用的命名「GameRes」在其他檔案中也有使用,
因此我判斷可能是相同的命名所造成編譯混淆,
所以在更改了此私有類別命名使其為唯一之後 參數存取就正常了。

沒有留言:

張貼留言