博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mac 上使用jdb 调试Android
阅读量:6965 次
发布时间:2019-06-27

本文共 1206 字,大约阅读时间需要 4 分钟。

0. 假设

假设要调试的apk的包名为:com.github.androider

并且启动当前app

1. 得到目标app的进程号

命令行运行:

$ adb shell ps | grep "com.github.androider"

执行结果(第二列是进程号):

u0_a1423 4877 619 2613496 603872 0 0000000000 S com.github.androider

2. 设置端口转发

$ adb -d froward tcp:5005 jdwp:4877

tcp后面这个端口随意设置,只要没有被占用就行

3. jdb 连接

$ jdb -attach localhost:5005

jdb 连接到刚才设置的端口

注意win上的链接命令是: jdb –connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=5005

4. 设置断点

通过上面的操作,jdb调试器已经能和手机上的进程通信了。现在开始设置断点调试。

用法: stop at :<line_number> 或 stop in .<method_name>[(argument_type,...)]

//用法: stop at 
:
或//stop in
.
[(argument_type,...)]复制代码

例如: stop in com.github.androider.MainActivity.onCreate

或者带参数: stop in com.github.androider.MainActivity.onCreate(android.os.Bundle)

删除断点clear com.github.androider.MainActivity.onCreate(android.os.Bundle)

5. 调试

  • next 跳过一行(跨过调用)

  • step 执行当前行,如果可进入就进入

  • step up 执行到当前方法返回到其调用者

  • stepi 执行当前指令,进入方法

  • cont 在一个断点、异常或者步骤之后,会停留在下一个断点处

  • where 获取断点之前的调用栈,

  • locals 输出当前堆栈帧中的所有本地变量

  • print 显示Java对象和原生值。 对于原生类型的变量或字段而言,将会打印实际的值;对于对象而言,将打印一个简单的描述。请查看下方的dump命令以获取关于对象的更多信息。

  • dump 对于原生值而言,该命令等同于print。对于对象而言,它会打印对象中每个定义的字段的当前值。静态字段和实例字段均包含在内

  • run [类 [参数]] 开始执行应用程序的主类

真几把难用。。。

参考文章:

转载地址:http://hozsl.baihongyu.com/

你可能感兴趣的文章
3.9重建二叉树
查看>>
vue 源码深入学习分析——史上超详细
查看>>
struts2+spring+hibernate整合步骤
查看>>
python 修炼11 ----------线程进程
查看>>
装饰者模式(decorator pattern)
查看>>
使用Redis构建电商网站
查看>>
抽象类
查看>>
Tomcat目录结构
查看>>
使用sql语言操作数据库里面的表
查看>>
jmeter 添加监控windows硬件资源使用情况的方法
查看>>
Hibernate ORM框架——项目一:Hibernate事务的生命周期,不建议使用openSession而改造...
查看>>
As Easy As A+B
查看>>
元类编程-- 实现orm,以django Model为例
查看>>
pipenv 管理虚拟环境
查看>>
Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图
查看>>
Dynamics CRM2011 通过DeveloperToolkit在VS中部署遇到的问题
查看>>
css3 text-shadow
查看>>
struts 2读书笔记-----struts2的开发流程
查看>>
项目 08 WebSocket
查看>>
C# 模拟Http/Https请求框架类
查看>>