1. 程式人生 > >解碼混淆過的堆疊跟蹤資訊(Decoding Obfuscated Stack Traces)

解碼混淆過的堆疊跟蹤資訊(Decoding Obfuscated Stack Traces)

當混淆程式碼並輸出了一個堆疊除錯資訊時,這些方法名字是混淆過的,雖然可以進行除錯,但是除錯變得困難。幸運的是,每當混淆器執行時候,它都會輸出到檔案<project_root>/bin/proguard/mapping.txt中,該檔案包含了從原始類,方法和屬性名字到混淆後名字的對映。 Windows系統中retrace.bat指令碼命令或者Linux和Mac OS X系統中retrace.sh指令碼命令能把混淆後的堆疊除錯資訊轉換為可以理解的檔案。它被放在<sdk_root>/tools/proguard/目錄下。執行retrace工具的命令語法是:

retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]


例如:

retrace.bat -verbose mapping.txt obfuscated_trace.txt


如果你沒有為<stracktrace_file>指定值,那麼retrace工具從標準輸入讀取。
已釋出應用程式的除錯注意事項(Debugging considerations for published applications) 儲存好每一個已釋出給使用者的程式的mapping.txt檔案。通過儲存釋出構建版本的mapping.txt檔案拷貝,確保當用戶碰到bug,並把混淆後的堆疊除錯跟蹤資訊提交給你時,你可以進行除錯從而修復問題。程式的mapping.txt檔案在每次釋出構建時都會被覆蓋,所以你一定要注意儲存正確的版本。
例如,假設你已經發布了一個應用程式並在繼續在新的版本中開發新增新的功能。接著你馬上啟動混淆器並建立一個新的釋出版本。該操作把mapping.txt檔案覆蓋了。一個使用者提交了來自當前釋出版本的bug報告,該報告包含了堆疊除錯資訊。你再也不能對使用者的堆疊資訊進行除錯了,因為這個對應使用者本機上版本的mapping.txt檔案不存在了。其他覆蓋mapping.txt檔案的情況還有很多,所以對於每一個可能需要除錯的版本,你都要確保有一份拷貝。

如何儲存mapping.txt檔案由你決定。例如,你可以根據版本和構建號來重新命名它們,或者連同你的原始碼進行版本控制。

windows下retrace.bat在android sdk目錄中tools\proguard\bin下