Android下的JDB调试

原创 2012年03月28日 14:17:08

原文地址:http://blog.csdn.net/ariesjzj/article/details/7399249

 

第一步在$HOME/.jdbrc里设断点,如:

stop in com.almalence.hdr.MainScreen.FindExpoParameters

 

第二步让程序在启动时停止等待jdb:

Dev Tools -Development  Settings -> 选中要调的程序后点wait for debugger。

(具体可参见http://blog.csdn.net/ariesjzj/article/details/7393573

 

注:以上这两步不是必须的,只有在程序一起来就挂掉的情况下才用到,否则等程序启动起来也来得及attach上去和设断点。

 

第三步启动DDMS,这时程序前面应该有个红色小虫,点上面的开始调试按钮。这步不是必须的,这步的工作其实相当于手动敲:

$ adb -d forward tcp:8700 jdwp:$PID

其中$PID为要调程序的进程号。

 

第四步启动jdb客户端:

zjin@zjin-desktop:~/debug$ jdb -attach localhost:8700
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
Initializing jdb ...
*** Reading commands from /home/zjin/.jdbrc
Deferring breakpoint com.almalence.hdr.MainScreen.FindExpoParameters.
It will be set after the class is loaded.
> > Set deferred breakpoint com.almalence.hdr.MainScreen.FindExpoParameters

Breakpoint hit: "thread=<1> main", com.almalence.hdr.MainScreen.FindExpoParameters(), line=1,124 bci=0

<1> main[1] where
  [1] com.almalence.hdr.MainScreen.FindExpoParameters (MainScreen.java:1,124)
  [2] com.almalence.hdr.MainScreen.setupCamera (MainScreen.java:889)
  [3] com.almalence.hdr.MainScreen.surfaceChanged (MainScreen.java:579)
  [4] android.view.SurfaceView.updateWindow (SurfaceView.java:544)
  [5] android.view.SurfaceView.access$000 (SurfaceView.java:81)
  [6] android.view.SurfaceView$3.onPreDraw (SurfaceView.java:169)
  [7] android.view.ViewTreeObserver.dispatchOnPreDraw (ViewTreeObserver.java:590)
  [8] android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:1,620)
  [9] android.view.ViewRootImpl.handleMessage (ViewRootImpl.java:2,446)
  [10] android.os.Handler.dispatchMessage (Handler.java:99)
  [11] android.os.Looper.loop (Looper.java:137)
  [12] android.app.ActivityThread.main (ActivityThread.java:4,424)
  [13] java.lang.reflect.Method.invokeNative (native method)
  [14] java.lang.reflect.Method.invoke (Method.java:511)
  [15] com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:785)
  [16] com.android.internal.os.ZygoteInit.main (ZygoteInit.java:552)
  [17] dalvik.system.NativeStart.main (native method)
<1> main[1]

 

常用命令:

threads:列出所有线程,然后就可以用thread命令选线程来调了。

where:相当于gdb的bt,显示函数调用栈。

up, down:在函数调用栈中上一层和下一层。

monitor:每次停止时执行的命令。如monitor locals后每一次执行next就可以自动打出局部变量。

locals:列出局部变量

classes:列举当前已知的类。

next ,step什么的和gdb里一样。

suspend, resume:线程的suspend和resume,需要加线程号为参数。

set,print:设置,输出表达式的值。

methods, fileds:列举类的方法和成员变量。

catch, watch:跟异常和数据的变化,和gdb里差不多。

trace:跟踪函数的进出。不用在函数头尾手动加printf了。

cont:断点后继续执行。

还有很多其它命令可在提示符下打help查看。

 

 

版权声明:本文为博主原创文章,只要标明出处即可转载。

相关文章推荐

jdb 调试android 简介

jdb 包含在jdk,使用jdb 之前需要先配置jdk的环境变量。 jdb 常用于三方apk 无源码动态调试,与其配合的工具为 baksmali、apkanalyser, 通过apkanalyser打...
  • xiaolli
  • xiaolli
  • 2016年04月01日 22:30
  • 1594

动态调试so中init段下断点问题

原文标题是:浅谈被加壳ELF的调试 http://ju.outofmemory.cn/entry/162541 原文标题:动态调试so在init_array处下断点 http://0nly3nd....
  • fengvmu
  • fengvmu
  • 2015年07月16日 19:25
  • 1200

利用JDB附加调试JAVA程序

之前有介绍用Eclipse远程调试JAVA程序,见Eclipse远程调试JAVA程序,但现场JAVA程序出现异常,又不能在现场真实环境装Eclipse来调试,所幸有JDB这个工具。此工具的常规用法不介...
  • BeanJoy
  • BeanJoy
  • 2012年08月01日 10:37
  • 5974

使用jdb对tomcat进行远程调试

在工作中,经常遇到项目在生产系统遇到问题,而在测试环境或者开发环境不能复现,这时候一个重要的方法就是要在生产系统进行调试,这里调试分为两种: 使用开发工具(eclipse)进行远程调...

jdb 调试java

一直在gdb 下调试c/c++程序。 突然要写个java程序,又不是很喜欢使用eclipse,那怎么调试程序呢。你还可以使用 jdb。 它是jdk 内置的一个java debug工具。类似...
  • jincm13
  • jincm13
  • 2015年06月10日 17:58
  • 926

Android 热修复Tinker 在项目中的使用

热修复技术出来也已经有好长一段时间了,目前比较主流的热修复方案主要有一下几种: QQ团队基于android dex分包方案提出的热修复方案,代表:Nuwa , Hotfix Alibaba 提出...
  • wning1
  • wning1
  • 2017年04月16日 17:21
  • 877

jdb 调试android 简介

jdb 包含在jdk,使用jdb 之前需要先配置jdk的环境变量。 jdb 常用于三方apk 无源码动态调试,与其配合的工具为 baksmali、apkanalyser, 通过apkanalyser打...
  • xiaolli
  • xiaolli
  • 2016年04月01日 22:30
  • 1594

Android So动态调试之反jdb附加的解决大法

今天国庆的第六天,西安淅淅沥沥小雨下个不停,索性卧在床上不如品一杯西湖龙井,更新一篇博客,一来帮助需要之人;二来加深自己的理解。 问题篇: 在上一篇中讲到了关于Android so的动态调试,没看的可...

如何使用jdb调试android的java程序

如何使用jdb调试android的java程序 习惯了gdb,总觉得eclipse太过臃肿,各种不爽。看到李先静写了一篇“用jdb/jdbshell调试android程序“(http://www.l...

Android So动态调试之反jdb附加的解决大法

今天国庆的第六天,西安淅淅沥沥小雨下个不停,索性卧在床上不如品一杯西湖龙井,更新一篇博客,一来帮助需要之人;二来加深自己的理解。 问题篇: 在上一篇中讲到了关于Android so的动态调...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android下的JDB调试
举报原因:
原因补充:

(最多只允许输入30个字)