一、使用DDMS
1.将程序使用apktool转化为smali代码,在关键代码左右注入log代码(的smali形式,如输出寄存器v0的值),之后重新打包apk,再执行时可以从 logcat 中看到输出。
2.栈跟踪法:如,在关键代码左右插入new Exception("print trace").printStackTrace();的smali代码形式,之后重新打包签名,再次运行可以在logcat窗口中得到栈跟踪信息。
3.method profiling: 可以用ddms中的method profiling功能跟踪调用过哪些方法。android sdk本身也支持method profiling,在android.os.Debug类中,提供了startMethodTracing()和stopMethodTracing()两个方法来开启与关闭method profiling。如
android.os.Debug.startMethodTracing("123");
a();
android.os.Debug.stopMethodTracing("123");
字符串"123"为trace文件名,代码执行后会在sd卡根目录生成123.trace文件,其中包含了a()方法执行过程中所有方法的调用等信息,可以使用sdk提供的traceview工具来打开它,该工具是android sdk的tools目录下的一个脚本文件。先用adb pull /mnt/sdcard/123.trace将文件拷贝下来,之后执行traceview 123.trace打开TraceView窗口查看文件。可以在smali文件中注入代码来跟踪方法的执行,比如在onCreate()中start trace, 在onStop中stop trace. 注意要在manifest中加上android.permission.WRITE_EXTERNAL_STORAGE的权限。
二、使用AndBug
andbug是用python脚本写的,不支持单步调试,而且无法对自定义的方法设置断点,因此在使用过程中会感到诸多不便。但允许分析人员扩展脚本。
三、IDA Pro
从6.1版本开始支持动态调试android原生程序。
看起来很强大的样子。改天搞个windows系统的pc一定要试验下。
原文:http://www.cnblogs.com/CarrieCui/p/5119070.html