改良版 flash debugger
*改良後的 DebuggerPanel 畫面

昨天的文章中提到使用 mtasc編譯swf時,沒辦法看到trace的結果,因此必需要採用某些外部的 logger來做這件事。
*Flash Debug Panel 雀屏中選
在把目前檯面上幾個常見的solution都玩過一遍後,我選擇了 keith peters 與 tim wailing 合作的 Flash Debug Panel

選擇它的原因是使用方法最簡單,提供的功能也最單純(就是 trace 跟 traceObject兩個method,其它雜七雜八的都不要),同時是open source,可以視需要修改。
Flash Debug Panel的使用方法非常簡單:
1、先將 Debug.as 這個class放到 flash 的 class path裏
2、使用時用下列語法:
-
Debug.trace("hello world");
-
//or when dealing with object
-
Debug.traceObject("objFooBar", 2);
其中 traceObject等於是一個簡化版的 object dumper,可以依指定的層級數將物件一層層的顯示出來。
使用這個class的附加好處是,由於method是封裝在 Debug這個class裏面,因此日後如果需要更完整的logging功能,例如寫入database或處理xml/web service 物件,也可以很輕易的做出來,只要對外的介面不變即可(這個叫 encapsulation,是使用OO的主要好處之一)
*Flash Debug Panel 的四個缺點
但Flash Debug Panel也有一些缺點(就我個人使用而言)
1、字太小小小小:我的螢幕解析度是 1600*1024,因此小於16px的字基本上都太吃力,而預設值是 10px,so....第一步就是先把字型改成 Tahoma 16px 這樣又大又清楚真是快樂啊~
2、只能透過FDP 文字框顯示訊息:由於用了這個Debug class後,以後所有的程式碼都要改成Debug.trace(),但我不見得只會用 mtasc 編譯,如果那天改回用mmc時,這些track訊息就看不到了,所以第二步就是加入也同步在flash output panel 顯示trace內容的功能(謝謝aral提供的小tips)
3、文字框捲軸不會自動捲動:通常當文字超過一頁時,scrollbar 的 scroller應該要自動捲動到最下方,這樣才能看到最新顯示的訊息,而不是每次都要手工捲動,因此第三步就是改程式碼讓scroller永遠捲到最下面。
4、介面太小:介面上有許多選項其實我用不到,而最常用的其實只有一個,就是 clear,平常在flash裏我也是一直按 F2做同樣的事,因此第四步就是把介面上不需要的controls拿掉,然後把clear button改的又長又寬,這樣就很難miss了。
改完上面四項後,發現還有一個更難纏的問題,原本 keith 有用C#將swf包裝過,因此可以勾選 always on top ,這樣 debug panel會永遠顯示在最上層,不會被其它程式蓋住,但我修改過的swf就無法更新進去,因此只能自已手工再包一次。
不過好險前一個案子買了 zinc 的 projector,裏面pc/mac/ppc一應俱全,所以只花幾分鐘勾幾個選項,就把swf包成exe檔,不但可以 最上層顯示,還順便做了 tray icon (no taskbar icon),這樣這個debugger就可以在開機時自動載入並乖乖的躲在 tray裏等者使用。
*zinc的限制多
比較有趣的是雖然zinc要包swf很容易,但由於keith的程式碼裏有特別處理onResize這部份,會動態一直重排介面上的controls,因此要特別處理 zinc event --> swf event 這段,不然這些事件會在zinc就被吃掉。
另外也由於做了這個小程式,才順便發現原來 zinc 與 AS2 的整合程度還真是不太高,或者說,呃,挺糟糕的,原本我以為至少應該是比較OO的手法才是,而不是硬性規定將程式碼寫在fla裏的第1格(這是我最痛恨也絕不允許工程師做的事, 因為這樣一來就無法透過subversion做 diff/merg了),不過現階段的需求已達成,剩下的問題就隨緣吧...orz
*結論
btw, 如果你需要這個程式,請先到bit-101的blog下載原版,對keith, tim兩位工程師表達最基本的敬意,如果他們的功能真的不敷使用,再留言或來信索取,大小約為 2mb (ain't my fault, it's zinc doing this)


Trackback this post | Subscribe to the comments via RSS Feed