android studio中崩潰無法查看log?
用AS,App崩潰(閃退)時是不顯示log的,或者一閃而過,而eclipse就可以顯示,這樣對於查找錯誤帶來很大的困難。問了幾個用as的朋友也遇到一樣的情況,應該不是個例吧?
@那就這樣吧 說的對,我稍微補充一下
注意右上角,選擇 Show only selected application 的話,Log就只會打出來你在上面選擇的那個進程
也就是上圖中的com.meizu.safe想看崩潰Log的話,可以選擇No Filters,Log等級選成Warn,減少Log刷屏速度然後就可以看到你期待的Crash Log了。這個問題我遇到過,真機上常見,我一般都是切換到模擬器去。目前還不知道解決辦法
不顯示可能是因為程序被殺死了,沒有了連接,所以Log都消失了。一般程序崩潰的時候都有一個提示信息,不要立即點擊確定按鈕,可以在查看信息之後在點擊確定。這個時候的Log信息還是存在的。其實也可以寫設置Application的UncaughtException實現對崩潰信息的簡單處理,這樣查看的話就相對麻煩,可以在發布之後使用。
這個我經常遇到,確實很煩,崩潰後堆棧堆棧信息會自動清空,這時候我會打開eclipse,重現崩潰,查看logcat上崩潰信息,幸好機子配置不錯,不然開個AS又開Eclipse會卡出翔
發現一個不用開eclipse也可以查看到崩潰信息的方法:從菜單的Tools打開Android Device Monitor,打開一看就是eclipse的DDMS,換個名字而已。看桌面截圖,左邊是Android Device Monitor,右邊是AS的logcat,這樣可以同時開去查看信息,當應用發生崩潰的時候右邊的logcat信息有時候是會給清除掉的,而Android Device Monitor的崩潰信息依然在的,這樣就不用再打開eclipse了,對內存不足的童鞋很有用。不過需要注意的是,開了Android Device Monitor是不能打斷點debug的,因為你選擇了log選擇看調試應用的log,你選擇查看所有就有了!不管你軟體退出沒有,因為系統log太多避免無用信息你過濾關鍵字就好,直接搜索你軟體的包名就出來了
我也遇到過,估計是Android Studio本身的bug,目前不知道解決方案。
sleep
在log窗口的右上角有個 上Show only select application. log(憑藉印象寫的,具體名字肯能不是)點下 換成 all ,就可以看到了。這是ue設計問題。
剛剛又出現這種情況,同事告訴了我一個方法,如圖:選擇 DEAD 即可看到 崩潰時的 log
crash之後在進程里選 http://xxx.xxx.xxx(DEAD), 會出現之前的crash信息。
最高贊答案在模擬器上應該是可以的,但在真機測試環境中仍然可能無法報出崩潰異常,解決方案是採用CrashHanlder捕捉,並在獲取到異常後進行列印或存儲,此時不要設置立刻重啟app,如果是直接列印的方式,會導致log信息重置,存儲到文件的方式則可能存儲失敗,建議捕捉到異常後不要立刻重啟,在測試環境下完全可以讓崩潰定格在當前頁面
@Override
public void uncaughtException(Thread thread, Throwable ex) {
if (!handleException(ex) mDefaultHandler != null) {
//如果用戶沒有處理則讓系統默認的異常處理器來處理
mDefaultHandler.uncaughtException(thread, ex);
} else {
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
Log.e(TAG, "error : ", e);
}
//退出程序並重啟,可選
startApp();
}
}
private boolean handleException(Throwable ex) {
if (ex == null) {
return false;
}
//收集設備參數信息
collectDeviceInfo(mContext);
//使用Toast來顯示異常信息
new Thread() {
@Override
public void run() {
Looper.prepare();
Toast.makeText(mContext, "很抱歉,程序出現異常,即將退出.", Toast.LENGTH_SHORT).show();
Looper.loop();
}
}.start();
//保存日誌文件
saveCatchInfo2File(ex);
return true;
}
/**
* 保存錯誤信息到文件中並列印錯誤 日誌
*/
private String saveCatchInfo2File(Throwable ex) {
Log.e(TAG, "Message: "+ex.getMessage()+"
"+"Cause: "+ex.getCause());
StringBuffer sb = new StringBuffer();
for (Map.Entry&
String key = entry.getKey();
String value = entry.getValue();
sb.append(key + "=" + value + "
");
}
Writer writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
ex.printStackTrace(printWriter);
Throwable cause = ex.getCause();
while (cause != null) {
cause.printStackTrace(printWriter);
cause = cause.getCause();
}
printWriter.close();
String result = writer.toString();
sb.append(result);
try {
String fileName = "崩潰日誌" + ".txt";
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
if(FileUtils.createFileByDeleteOldFile(CrashPath)){
LogUtils.e("崩潰日誌生成成功!");
File file = FileUtils.getFileByPath(CrashPath);
FileOutputStream fos = new FileOutputStream(file);
fos.write(sb.toString().getBytes());
fos.close();
//將異常信息發送到伺服器,代碼缺失
}
}
return fileName;
} catch (Exception e) {
Log.e(TAG, "an error occured while writing file...", e);
}
return null;
}
打開命令行,adb logcat &>&>xxx.log然後在log里搜 。thread exit
我今天就遇到過!
魅族手機莫名奇妙的崩潰,並且沒有日誌!
主要是代碼在其他手機都好好地啊!
紮鐵了!
AS 如果運行app崩潰的話,不要立刻點掉手機上的那個提示:「XX已停止運行」,不要點確定。這個時候你在AS上可以查看到異常或者bug信息。或者,你可以選擇[DEAD]的那一項,來查看異常。
是你們設置問題,剛才崩潰的app,日誌在這裡選擇就可以了
我是加了一個全局的異常捕獲,發布版的話,崩潰睡上3秒,彈出提示,重啟App。調試版的話,崩潰睡上8秒,這8秒的時間足夠把崩潰信息給copy下來了
哎 我這直接崩潰 報的錯都莫名其妙 大家說的找到了 log system 都沒有列印出來
這個問題確實很煩。。。不過我的app集成了LeanCloud的bug反饋,每次我都去那裡去看崩潰日誌。。。當然要保證網路良好,同時不要老崩潰,不然就太麻煩了
.....我也碰到了,好煩啊
========================
坑爹,把360手機助手卸載了log就不會自動清除了===================又出現這個情況了,是在debug後按停止debug按鈕後出現的,後面發現是Android標籤裡面的logcat不行,Debug標籤下的logcat可以。猜測應該是兩個競爭的原因。把覺得可能崩潰的地方用try catch包裹一下就不會Log閃退了。
推薦閱讀:
※電子郵件有沒有什麼地方不好用、需要改進?
※為什麼安卓版的印象筆記總是剪藏網頁失敗?
※美國的中央情報局(CIA)是否如美劇《國土安全》中所演的那樣,經常進行一些驚心動魄的間諜活動呢?
※為什麼中文互聯網上的爭論或者辯論經常會變成人身攻擊?
※當年互聯網泡沫以後程序員就業怎麼樣?
TAG:互聯網 | 程序員 | Android開發 | Android | AndroidStudio |