Release出去的产品如果出现了问题, 客户给了堆栈信息,由于我们的Android apk都是经过Proguard进行混淆过的, 那么如何才能还原当时的情景呢,至少我们应该知道是代码哪里出了错吧。。。
首先,每个release版本出去,必须要保留当时的mapping文件,这对于事后追踪bug很有必要,比如我们的产品有这样的文件:attnav-mapping-5.5.3.2.8402166.txt, 每个release 版本都会有这样的文件。那么问题来了,如何看这些文件呢。
比如, 客户报出了这样的堆栈信息:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.Bundle.containsKey(java.lang.String)' on a null object reference
at com.telenav.scout.module.dashboard.DashboardModel.buildLoadDataRequest(DashboardModel.java:25546)
at com.telenav.scout.module.BaseFragmentActivityHelper$1.com.telenav.scout.module.BaseModel.baseDoInBackground(BaseFragmentActivityHelper.java:1156)
at com.telenav.scout.module.BaseFragmentActivityHelper$1.loadInBackground(BaseFragmentActivityHelper.java:42)
at android.support.v4.content.AsyncTaskLoader$LoadTask.android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:1296)
at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground$42af7916(AsyncTaskLoader.java:42)
at android.support.v4.content.ModernAsyncTask$2.call(ModernAsyncTask.java:128)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java