日期:2014-05-16 浏览次数:20353 次
You may have debug Android in eclipse, Have you ever used jdb tracing Android. Since Dalvikvm support jdwp, we can use jdb to debug the program. there are 2 ways
frameworks/base/core/jni/AndroidRuntime.cpp 620 opt.optionString = 621 "-agentlib:jdwp=transport=dt_android_adb,suspend=n,server=y"; as opt.optionString = "-agentlib:jdwp=transport=dt_socket,address=8011,server=y,suspend=y";
if you won not do it, you can specify AndroidManifest.xml
<application android:label="@string/app_name" android:icon="@drawable/plasma" android:debuggable="true">
Or the App can not be debugged
I/Zygote ( 6843/6843): Accepting command socket connections I/jdwp ( 7385/7385): JDWP will wait for debugger on port 8011
Initializing jdb ... > VM Started: "thread=<1> main", dalvik.system.Zygote.nativeForkSystemServer(), line=-1 bci=-1 <1> main[1]
Use commands: stop in, cont, list, next, you will able to trace your code <1> main[1] stop in com.android.server.InputMethodManagerService.getEnabledInputMethodSubtypeList Deferring breakpoint com.android.server.InputMethodManagerService.getEnabledInputMethodSubtypeList. <1> main[1] cont > Ignoring cmd 268435570/199/1 from the VM Set deferred breakpoint com.android.server.InputMethodManagerService.getEnabledInputMethodSubtypeList Breakpoint hit: "thread=<12> android.server.ServerThread", com.android.server.InputMethodManagerService.getEnabledInputMethodSubtypeList(), line=845 bci=0 845 synchronized (mMethodMap) { <12> android.server.ServerThread[1] list 841 842 @Override 843 public List<InputMethodSubtype> getEnabledInputMethodSubtypeList(InputMethodInfo imi, 844 boolean allowsImplicitlySelectedSubtypes) { 845 => synchronized (mMethodMap) { 846 return getEnabledInputMethodSubtypeListLocked(imi, allowsImplicitlySelectedSubtypes); 847 } 848 } 849 850 @Override <12> android.server.ServerThread[1] next Step completed: "thread=<12> android.server.ServerThread", com.android.server.InputMethodManagerService.getEnabledInputMethodSubtypeList(), line=846 bci=3 846 return getEnabledInputMethodSubtypeListLocked(imi, allowsImplicitlySelectedSubtypes); <12> android.server.ServerThread[1]
There are shortcomings in "Android as host", because every time the JavaVM starts up, it will move to listen status, So the SystemServer will listen, even we don't want to. so "Jdb as debug host" is a better idea.