一加手机3 调试android用手机调试应用打不出log,怎么解

下次自动登录
现在的位置:
& 综合 & 正文
Android调试获取Log
1 Android Log
最近遇到一些抓log 的事情,很多来自网上达人的分享,加在一起总结一下:
log文件分为实时打印的,还有状态信息的两种
实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump, QXDM Log
状态信息的有:adb shell dmesg,adb shell dumpstate,adb shell dumpsys,adb bugreport
  adb logcat -b events -v time
打印系统事件的日志,比如触屏事件
  tcpdump 是很有用的,对于TCP/IP协议相关的都可以使用这个来抓,
  adb shell tcpdump -s 10000 -w /sdcard/capture.pcap,
  比如抓mms下载的时候的UA profile,browser上网的时候,使用proxy的APN下载,streaming的相关内容包括UA profile等。
其实一个就够了,那就是bugreport(命令adb bugreport&bugreport.log)。
里面包含有dmesg,dumpstate和dumpsys;
dmesg(命令adb shell dmesg & ldmesg_kernel.log)是kernel的log,凡是跟kernel相关的,比如driver出了问题(相机,蓝牙,usb,启动,等等)
dumpstate是系统状态信息,里面比较全,包括手机当前的内存信息、cpu信息、logcat缓存,kernel缓存等等;
dumpsys这个是关于系统所有进程Process的内容都在这个里面,adb shell dumpsys 这个命令还有更详尽的用法,
比如adb shell dumpsys meminfo system是查看system这个process的内存信息。
dumpsys [options]
显示内存信息
显示CPU信息
显示accounts信息
activity 显示所有的activities的信息
显示键盘,窗口和它们的关系
显示wifi信息
  通过adb logcat/bugreport可以实时的查看系统的log,以及系统的状态信息;
  如何将Log存储下来,保存当时系统运行的情况呢?
  可以通过一些脚本或者执行可执行程序来保存log信息,以便分析问题;
2 抓取实时log
int main(int argc, char *argv[])
//抓取main log
char path[] = "/xxx/xxx/app_main.log";
sprintf(cmd,"logcat -v time & %s",path);
fd = open(path, O_WRONLY|O_TRUNC|O_CREAT, 0777);
system(cmd);
//radio log
sprintf(cmd,"logcat -b radio -v time & %s",path);
system(cmd);
sprintf(cmd,"cat /proc/kmsg & %s",path);
system(cmd);
//bluetoolth log
sprintf(cmd,"hcidump -w %s","/data/bt.log");
system(cmd);
3 抓取状态log
int main(int argc, char *argv[])
//panic log 需要判断/proc/apanic_console是否存在
sprintf(cmd,"cp -R %s %s",from_dir,to_dir);
system(cmd);
//anr log /data/anr/
sprintf(cmd,"cp -R %s %s",from_dir,to_dir);
system(cmd);
//tombstones log /data/tombstones/ modem重启复位等
sprintf(cmd,"cp -R %s %s",from_dir,to_dir);
system(cmd);
//mdm log /data/tombstones/mdm/  modem重启复位
sprintf(cmd,"cp -R %s %s",from_dir,to_dir);
system(cmd);    ……
panic log:
  它表示Linux kernel走到了一个不知道该怎么走下一步的状况,
  /view/519ceae009ed50
tombstone log:
  当系统发生tombstone的时候,kernel首先会上报一个严重的警告信号(signal),上层接收到之后,
进程的调试工具会把进程中当时的调用栈现场保存起来,并在系统创建了data/tombstones目录后把异常时的进程信息写在此目录里面,
开发者需要通过调用栈来分析整个调用流程来找出出问题的点。
   /thread--1.html
4 Runtime 可执行程序
编译成可执行程序,当然在实际使用中需要一些控制参数。
代码里如何执行这些可执行程序:
在底层可以通过system();
在Java层Runtime.getRuntime().exec();
String BIN_PATH = "/system/bin/catch_log";
Runtime.getRuntime().exec(BIN_PATH + " -x 1");
Runtime.getRuntime().exec("/system/bin/cat
Runtime.getRuntime().exec("su -c chmod 777 /data/glad.txt");
Runtime.getRuntime().exec("/system/bin/sh /data/test.sh");
Android Runtime使得直接调用底层Linux下的可执行程序或脚本成为可能
比如Linux下写个测试工具,直接编译后apk中通过Runtime来调用
或者写个脚本,apk中直接调用,省去中间层或者JNI;
参考文档:http://blog.csdn.net/zmyde2010/article/details/6123987
5 diag_mdlog
这是高通提供的抓取qxdm log的东东。
既包括AP端得,也包括BP端的;或者跟选择端口有关系,8064ap和modem端口独立;
代码位置:\vendor\qcom\proprietary\diag\mdlog\
使用diag_mdlog这个可执行程序来抓取log
需要Diag.cfg文件来配置过滤项,选择需要的Log信息。在使用前必须放置一个Diag.cfg文件。
Diag.cfg文件可以用QXDM生成;可以通过F12,Filtered View /Config 来生成Diag.cfg
这个程序一次只能执行一个,可以用kill -9 PID 将其强制结束
6 抓取Ap 端 memory dump
高通qpst工具Memory Dump App
要在downloader模式
需要修改的nv项:
或者使用emmc进入downloader模式。
打开连接手机, Get Regions,选择需要保存的Regin,SaveTo选择一个文件夹,确定即可
注意:这个路径下不能有中文,必须是英文的路径
&&&&推荐文章:
【上篇】【下篇】android 代码优化:关闭输出日志
android关闭日志
我们在开发时,经常会输出各种日志来debug代码。但是等到应用发布的apk运行时不希望它输出日志。
关闭输出日志Log.v(),Log.i(),Log.w(),Log.v(),Log.e()等
那么我们可以通过proguard来删除各种日志输出代码。然后导出apk时,将会过滤掉日志代码。
通过配置proguard,将类android.util.Log的方法给置为为无效代码。(proguard是一个代码优化的工具,也可以混淆代码)
assumenosideeffects
assumenosideeffects,assume no side effects;假定无效;该属性也就是标识无效代码。我们就是通过这个参数来让proguard删除日志代码。
assumenosideeffects的官方解释:
In the optimization step, ProGuard will then remove calls to such methods, if it can determine that the return values aren't used.ProGuard will analyze your
program code to find such methods automatically.It will not analyze library code, for which this option can therefore be useful.
In general, making assumpti you can easily break the processed code. Only use this option if you know what you're doing!
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
使用这个配置时,一定要注意-dontoptimize,配置。
don‘t optimize 不要优化;将会会关闭优化,导致日志语句不会被优化掉。所以不能有这个配置
如何关闭日志:
我的项目目录:
1)打开proguard-------修改project.prZ喎"/kf/ware/vc/" target="_blank" class="keylink">vcGVydGllc87EvP6hozwvaDM+CjxwPjxpbWcgc3JjPQ=="" alt="\">
在project.properties文件最后行添加:proguard.config=proguard
如我的project.properties文件:
target=android-18
proguard.config=proguard-project.txt
2)配置proguard-------修改proguard配置文件,
如:我的配置文件是:proguard-project.txt
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
-dontwarn android.support.**
-keepclassmembers class **.R$* {
public static ;
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String,int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
3)导出关闭日志的apk
proguard,在导出apk的时候才会优化代码,生成优化后的apk。(完成代码混淆也是在导出apk,proguard将代码混淆后生成apk)
通过如上两个步骤,配置project.properties文件和proguard.properties文件;那么项目就配置好了。可以直接导出签名apk,该apk不会输出日志,我们用LogCat是看不到该apk的日志。
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("MainActivity", "log" );
通过生成的apk反编译出如下代码1-1)
public class MainActivity extends Activity
protected void onCreate(Bundle paramBundle)
super.onCreate(paramBundle);
setContentView();
运行LogCat中没有输出日志。
很明显Log.e("MainActivity","log" );被优化掉了
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("MainActivity", "log " + test());
private String test(){
Toast.makeText(this, "test", Toast.LENGTH_SHORT).show();
return "jjyy";
通过生成的apk反编译出如下代码2-1)
public class MainActivity extends Activity
protected void onCreate(Bundle paramBundle)
super.onCreate(paramBundle);
setContentView();
//如下是test()函数的代码
StringBuilder localStringBuilder = new StringBuilder("log ");
Toast.makeText(this, "test", 0).show();
localStringBuilder.append("jjyy").toString();
运行LogCat中没有输出日志。但是弹出toast。
很明显Log.e();被优化掉了,但是test()方法依然被保留了,
public class MainActivity extends Activity {
int i = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("MainActivity", "log" + test() );
Toast.makeText(this, "i = " + i, Toast.LENGTH_SHORT).show(); //i == 1;
private String test(){
return "test" +
通过生成的apk反编译出如下代码3-1)
public class MainActivity extends Activity
private int a = 0; //proguard将代码混淆后变量i变为了a
protected void onCreate(Bundle paramBundle)
super.onCreate(paramBundle);
setContentView();
//Log.e()代码被删除了,但是调用test()函数里的i++被直接优化到这里
StringBuilder localStringBuilder = new StringBuilder("log");
this.a = (1 + this.a);
localStringBuilder.append("test" + this.a).toString();
Toast.makeText(this, "i = " + this.a, 0).show();
运行LogCat中没有输出日志。但是弹出toast 显示字符串 : "i = 1"
很明显Log.e();被优化掉了,但是test()方法依然被保留了,
转载请注明出处,jiese1990。掺水油, 积分 321, 距离下一级还需 179 积分
掺水油, 积分 321, 距离下一级还需 179 积分
掺水油, 积分 321, 距离下一级还需 179 积分
主题 : 1|帖子 : 15|积分 : 321
---来自一加社区手机客户端
勾兑油, 积分 821, 距离下一级还需 179 积分
勾兑油, 积分 821, 距离下一级还需 179 积分
勾兑油, 积分 821, 距离下一级还需 179 积分
主题 : 18|帖子 : 150|积分 : 821
---来自一加社区手机客户端
掺水油, 积分 321, 距离下一级还需 179 积分
掺水油, 积分 321, 距离下一级还需 179 积分
掺水油, 积分 321, 距离下一级还需 179 积分
主题 : 1|帖子 : 15|积分 : 321
是7.0手机,eclipse就是打不出,有办法吗
---来自一加社区手机客户端
焦油, 积分 66, 距离下一级还需 134 积分
焦油, 积分 66, 距离下一级还需 134 积分
焦油, 积分 66, 距离下一级还需 134 积分
主题 : 4|帖子 : 18|积分 : 66
该用户从未签到
---来自一加社区手机客户端
焦油, 积分 66, 距离下一级还需 134 积分
焦油, 积分 66, 距离下一级还需 134 积分
焦油, 积分 66, 距离下一级还需 134 积分
主题 : 4|帖子 : 18|积分 : 66
该用户从未签到
同问 有人吗
---来自一加社区手机客户端
掺水油, 积分 321, 距离下一级还需 179 积分
掺水油, 积分 321, 距离下一级还需 179 积分
掺水油, 积分 321, 距离下一级还需 179 积分
主题 : 1|帖子 : 15|积分 : 321
lee316 发表于
---来自一加社区手机客户端
用Android studio 可以
---来自一加社区手机客户端
深圳市万普拉斯科技有限公司 版权所有(10001人阅读
Android(108)
-----------------------------------------
华为Android手机打开Log, 显示日志
在用华为安卓手机开发时LogCat没有显示日志,在cmd里输入“adb&logcat”,提示“Unable&to&open&log&device&'/dev/log/main':&No&such&file&or&directory”,可按以下步骤解决:
1)进入工程模式
&&&有两种方式可以进入工程模式:
&&&&&a.&在拨号界面输入“*#*#2846579#*#*”
&&&&&b.&若是小米4.0系统(MIUI),进入“设置--&全部设置--&原厂设置--&工程模式”
(图1&工程模式界面)
2)&打开Log
&&&&1.&依次进入“后台设置--&2.LOG设置--&LOG开关”,选择“LOG打开”;返回上一个界面,点击“LOG级别设置”,选择“VREBOSE”
&&&&2.&返回到图1所示二面,选择“6.&Dump&&&Log”,打开开关“打开Dump&&&Log”
3)&重启手机
From:&/windgoing/item/507be1a9ac067d2d8919d3ea
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1488192次
积分:14070
积分:14070
排名:第874名
原创:166篇
转载:381篇
译文:16篇
评论:143条
(1)(1)(1)(1)(1)(2)(1)(1)(1)(4)(13)(1)(10)(4)(5)(1)(7)(36)(16)(25)(20)(12)(23)(6)(4)(15)(2)(21)(11)(6)(1)(5)(2)(1)(4)(1)(1)(2)(6)(6)(1)(1)(1)(1)(1)(1)(9)(8)(3)(1)(5)(7)(1)(2)(3)(6)(6)(4)(1)(1)(2)(25)(1)(6)(3)(3)(3)(3)(11)(5)(23)(17)(42)(35)(33)(7)

我要回帖

更多关于 android用手机调试 的文章

 

随机推荐