Android下的JDB调试

http://blog.csdn.net/jinzhuojun/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查看。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值