沈阳定制型网站建设,网页翻译失败,成都旅游公司排名前十,口碑营销的方法1.查看当前堆栈 Call tree new Exception(“print trace”).printStackTrace(); #xff08;在logcat中打印当前函数调用关系#xff09; 2.MethodTracing 性能分析与优#xff08; 函数占用CPU时间#xff0c; 调用次数#xff0c; 函数调用关系#xff09; a) 在程序… 1.查看当前堆栈 Call tree new Exception(“print trace”).printStackTrace(); 在logcat中打印当前函数调用关系 2.MethodTracing 性能分析与优 函数占用CPU时间 调用次数 函数调用关系 a) 在程序代码中加入追踪开关 import android.os.Debug; … android.os.Debug.startMethodTracing(“/data/tmp/test”);//先建/data/tmp目录 …//被追踪程序段 android.os.Debug.stopMethodTracing(); b)编译运行后设备端生成/data/tmp/test.trace文件 c)把trace文件复制到PC端 $adb pull /data/tmp/test.trace/ d)使用android自带工具分析trace文件 $$ANDROID_SRC/out/host/linux-x86/bin/traceview test.trace 此时可看到各个函数被调用的次数CPU占用率等信息 e)使用android自带工具分析生成调用关系类图 $apt-get install graphviz #安装图片相关软件 $ANDROID_SRC/out/host/linux-x86/bin/dmtracedump –g test.png test.trace 此时目录下生成类图test.png 注意trace文件生成与libdvm模块DEBUG版本相冲突所以此方法只适用于对非DEBUG版本模拟器的调试否则在分析trace文件时会报错 3.HProf (Heap Profile) 内存占用 及泄漏分析 a) 在代码中加入dump动作 import android.os.Debug; import java.io.IOException; …… try{ android.os.Debug.dumpHprofData(“/data/tmp/input.hprof”);//预先建立/data/tmp }catch(IOException ioe){ } b) 把hprof文件复制到PC端 $adb pull /data/tmp/input.hprof ./ c)使用命令hprof-conv把hprof转成MAT识别的标准的hprof $$ANDROID_SRC/out/host/linux-x86/bin/hprof-conv input.hprof output.hprof d) 使用MAT工具看hprof信息 下载MAT工具http://www.eclipse.org/mat/downloads.php 用工具打开output.hprof 注意此工具只显示java层面而不能显示C层内存占用信息 4.SamplingProfile (要求android 2.0) 每隔毫秒对当前正在 运行的函数取样 并输出到log中 在代码中加入取样设定 import dalvik.system.SamplingProfiler … SamplingProfile spSamplingProfiler.getInstance(); sp.start(n);//n为设定每秒采样次数 sp.logSnapshot(sp.snapshot()); … sp.shutDown(); (自动启动一个线程监测在logcat中打印信息) 5.通过发送系统信号 获取Call tree与 内存信息 1) 原理dalvik虚拟机对SIGQUIT和SIGUSR1信号进行处理 (dalvik/vm/SignalCatcher.c)分别完成取当前堆栈和取当前内存情况的功能 2)用法 a) $ chmod 777 /data/anr -R # 把anr目录权限设为可写 $ rm /data/anr/traces.txt # 删除之前的trace信息 $ ps # 找到进程号 $ kill -3 进程号 # 发送SIGQUIT信号给该进程此时生成trace信息 $ cat /data/anr/traces.txt 功能实现遍历thread list(dalvik/vm/Thread.c:dvmDumpAllThreadEx())并打印当前函数调用关系(dalvik/vm/interp/Stack.c:dumpFrames()) b) $ chmod 777 /data/misc –R $ ps # 找到进程号 $ kill -10 进程号 # 发送SIGQUIT信事信号给该进程此时生成hprof信息 $ ls /data/misc/*.hprof 此时生成hprf文件如何查看此文件见第2部分(HProf) 注意hprof文件很大注意用完删除以免占满存储器6.logcat 1) android.util.Log利用println的标准java输出词句并加前缀I/V/D…. 2) dalvik利用管道加线程方式先利用dup2把stdout和stderr重定向到管理中(vm/StdioConverter.c:dvmstdioConverterStartup)然后再启动一个线程从管道另一端读出内容 (dalvik/vm/StdioConverter.c:stdioconverterThreadStart())使用LOG公共工具system/core/liblog/logd_write.c: __android_log_print()输出到/dev/log/*中 3)logcat通过加不同参数看/dev/log/下的不同输入信息 #logcat –b main显示主缓冲区中的信息 #logcat –b radio 显示无线缓冲区中的信息 #logcat –b events显示事件缓冲区中的信息 7.jdwp(java debug wire protocol)及原理 1) 虚拟机设备端在启动时加载了Agent JDWP 从而具备了调试功能。在调试器端PC端通过JDWP协议与设备连接通过发送命令来获取的状态和控制Java程序的执行。JDWP 是通过命令command和回复reply进行通信的。 2) JDK 中调试工具 jdb 就是一个调试器DDMS也提供调试器与设备相连。 3) dalvik为JDWP提供了两种连接方式tcp方式和adb方式tcp方式可以手工指定端口adb方式自动设定为8700端口通常使用DDMS调试就是通过adb方式8.monkey压力测试 android自带的命令行工具。它向系统发送伪随机的用户事件流实现对正在开发的应用程序进行压力测试。 在设备端打开setting界面 $ adb shell #monkey –p com.android.settings -v 500 此时可以看到界面不断被切换 9.查看Android源码 Eclipse插件 sqlitemanager插件实时查看写入db数据的改变 sqllitemanger插件的用法 Using SQLite in ANDROID You can see the sqlite database in eclipse by opening File Explorer .Then /data/data/package_name/databases But here we cannot see the tables and table data. For viewing the table details Eclipse has a plugin. You can download the jar from below. sqlitemanager下载. 注意如果是写入至系统临时目录db则需root) 10.SQLiteManager plugin for eclipse sqlitemanager插件实时查看写入db数据的改变 sqllitemanger插件的用法 Using SQLite in ANDROID You can see the sqlite database in eclipse by opening File Explorer .Then /data/data/package_name/databases But here we cannot see the tables and table data. For viewing the table details Eclipse has a plugin. You can download the jar from below. sqlitemanager下载. 注意如果是写入系统临时目录db则需root)11.自定义内存日志通过独立的界面显示12.try catch的快捷键快捷键ctrl alt t转载于:https://www.cnblogs.com/reboost/p/9540513.html