2010-03-31 32 views
0

我將來自這裏和那裏的一些代碼拼湊在一起以獲得我喜歡的跟蹤...它會生成一個錯誤以獲取堆棧跟蹤並找出跟蹤的例程名稱,我喜歡跟蹤日誌中的詳細信息。Adob​​e Air,打包的安裝失敗,跟蹤例程...怎麼回事?

問題:它在安裝的AIR文件失敗。我想知道爲什麼?我不指望它做任何事情......只是,我寧願它不會導致程序失敗!

TX 阿蒂

enter code here  

static public function XTRACE(... traceArgs):void { 
    try { 
     throw new Error(); // make a stack 
    } catch (e:Error) { 
     var stack:String = e.getStackTrace(); 
     var frames:Array = stack.split("\n"); 
     var myFrame:String = String(frames[2]); 
     myFrame = myFrame.replace("\t", ""); 

     // "at " can be followed by some part of the package 
     // you don't want to see. E.g., if your code is all in 
     // com.foo.bar, you can put "at com.foo.bar." so as not 
     // to crowd the display 
     myFrame = myFrame.substr("at ".length); 
     myFrame = myFrame.substring(0, myFrame.indexOf("[")); 
     var now:Date = new Date(); 
     trace(new Date().toLocaleTimeString() + ":" + myFrame + ": " + traceArgs.join(" ")); 
    } 
} 

回答

0

在被你的應用程序沒有什麼辦法嗎?

1)跟蹤例程進行調試,使您的跟蹤將不會在已安裝的應用程序做任何事情。

2)我不知道,當你調用這個程序,但它似乎不可思議,你有一個程序只拋出一個錯誤。我認爲在這個代碼中,'catch'只會在拋出錯誤的時候纔會進入。通常情況下,您會嘗試執行一些有用的操作,並在出現問題時捕捉錯誤。

+0

應用程序故障的症狀明顯的是,打開屏幕出現空白。沒有顯示或發現錯誤(例如在系統日誌中)。 當移除對XTRACE的調用時,程序正常工作。 更簡單的解決方案:當XTRACE例程的所有內容都被註釋掉時,那麼「.air」安裝的程序工作正常。 XTRACE中的錯誤會創建一個堆棧跟蹤,所以跟蹤的來源是已知的,例如, Global.XTRACE( 「用於測試的移動數據」) 生產: 下午1時14分26秒:com.muchoswing.cantoyo :: ApplicationClass/handleButton():用於測試的移動數據 – 2010-03-31 17:21:24

+0

註釋這些行一個接一個,看看什麼線斷了 – 99miles 2010-03-31 17:34:58

0

在跟蹤函數中,在它被新的關鍵字實例化之前,試圖靜態調用Date()。toLocaleTimeString()。請嘗試以下方法:

trace((new Date()).toLocaleTimeString() + ":" + myFrame + ": " + traceArgs.join(" ")); 
0

感謝您的輸入Fergal。 XTRACE功能可以在調試播放器中正常運行,並且僅在與釋放播放器一起運行時纔會失敗。所以我想我必須使用值按正確的順序關聯的代碼行......我就用一個功能我不知道前結算:

enter code here 
static public function XTRACE(... traceArgs):void { 
    if (Capabilities.isDebugger) {  

就這樣,X跟蹤什麼也不做,除非它是在執行一個調試環境。所以它可以解決這個問題。我還是會用你的括號不過,我喜歡讓聯想過於明顯;-)

+0

添加您的額外信息的問題,讓它在一個答案是奇怪的! – grapefrukt 2010-04-01 06:56:34

0

我知道你可能已經垂垂老矣,忘了什麼是閃既然你問這個問題的順序。但是,您正在獲得NPE,因爲e.getStackTrace()在發佈播放器中返回null。

一對夫婦的其他東西:

  1. 你並不需要拋出錯誤得到一個堆棧跟蹤;新的Error()。getStackTrace()工作正常。
  2. 因爲這是調試代碼,並且調用代碼可能沒有預料的錯誤,你應該換一個嘗試捕捉整個事情。
  3. 編譯器不會解析'at'.length,所以每次運行時都會調用它。除非你真的偏執,否則你可以將它硬編碼爲3.
  4. 這兩個基站都可以合併爲1
  5. 不使用now變量。