以前不知的有这么个玩意,不需要解决import问题,步骤也很简单:
ubuntu上是有jdb的,运行一下就能看到,类似与gdb
1.需要手机端目标进程的PID adb shell ps | grep一下就行
2.设置adb forward
adb forward tcp:9000 jdwp:PID //目标进程的ID
3.指定源码目录,比如Gallery2
export SOURCEPATH=/home/androidcode/android4.4/packages/apps/Gallery2
4.启动jdb
jdb -sourcepath $SOURCEPATH -attach localhost:9000
然后就可以调试了
打断点
stop at 包名.类名:行号
用clear可以查看设置的断点
<1> main[1] clear
Breakpoints set:
breakpoint com.android.gallery3d.filtershow.crop.CropActivity:305
breakpoint com.android.gallery3d.filtershow.tools.SaveImage:673
breakpoint com.android.gallery3d.filtershow.tools.SaveImage:678
<1> main[1]
清除断点:
clear 包名.类名:行号
显示变量:
locals
<23> ProcessingTaskController[1] locals
Method arguments:
oldSelectedFile = instance of java.io.File(id=830084687824)
values = instance of android.content.ContentValues(id=830084688192)
result = instance of android.net.Uri$StringUri(id=830084625344)
Local variables:
context = instance of com.android.gallery3d.filtershow.pipeline.ProcessingService(id=830054410648)
sourceUri = instance of android.net.Uri$StringUri(id=830084625344)
file = instance of java.io.File(id=830084653392)
time = 1387794041594
deleteOriginal = true
fileUri = false
print 打印指定变量
<1> main[1] print sourceUri
sourceUri = "content://media/external/images/media/1761"
<23> ProcessingTaskController[1] print fileUri
fileUri = false
另外threads可以用来查看所有的线程
> threads
Group system:
(java.lang.Thread)0xc141e1a2a8 <8> FinalizerWatchdogDaemon cond. waiting
(java.lang.Thread)0xc141e1a0f8 <7> FinalizerDaemon cond. waiting
(java.lang.Thread)0xc141e19f90 <6> ReferenceQueueDaemon cond. waiting
(java.lang.Thread)0xc141e19ea0 <5> Compiler cond. waiting
(java.lang.Thread)0xc141e19cc0 <3> Signal Catcher cond. waiting
(java.lang.Thread)0xc141e19be0 <2> GC cond. waiting
Group main:
(java.lang.Thread)0xc1418d5ca8 <1> main running
(java.lang.Thread)0xc144f4c7c0 <24> Binder_7 running
(java.lang.Thread)0xc144f4c6d0 <23> Binder_6 running
(java.lang.Thread)0xc1422d5dd0 <27> AsyncTask #5 cond. waiting
(java.lang.Thread)0xc1422d31c8 <26> AsyncTask #4 cond. waiting
(java.lang.Thread)0xc1427ba540 <20> AsyncTask #3 cond. waiting
(java.lang.Thread)0xc1426febc8 <22> Binder_5 running
(java.lang.Thread)0xc1426fead8 <21> Binder_4 running
(java.lang.Thread)0xc142632258 <19> AsyncTask #2 cond. waiting
(java.lang.Thread)0xc14265ac50 <12> AsyncTask #1 cond. waiting
(com.android.internal.os.BackgroundThread)0xc141fda0b0 <18> android.bg running
(com.android.gallery3d.util.PriorityThreadFactory$1)0xc141f23d40 <17> thread-pool-3 cond. waiting
(java.lang.Thread)0xc141f2c870 <16> Binder_3 running
(com.android.gallery3d.util.PriorityThreadFactory$1)0xc141f2cdd8 <15> thread-pool-2 cond. waiting
(com.android.gallery3d.util.PriorityThreadFactory$1)0xc141f2e5c0 <14> thread-pool-1 cond. waiting
(com.android.gallery3d.util.PriorityThreadFactory$1)0xc141e8c6b8 <13> thread-pool-0 cond. waiting
(android.opengl.GLSurfaceView$GLThread)0xc141e857e8 <11> GLThread 159 cond. waiting
(java.lang.Thread)0xc141e34648 <10> Binder_2 running
(java.lang.Thread)0xc141e34558 <9> Binder_1 running
thread 线程
(java.lang.Thread)0xc141e34558 <9> Binder_1 running
> thread 0xc141e34558
suspend之后可以wherei查看栈