调试集成 Java 和 C/C++ 的代码
2010-01-25 00:00:00 来源:WEB开发网步骤 2.在 GDB 中重复遍历循环,以在 Java 的“三倍数字”方法中设置断点。当 JDB 响应时,只需继续遍历循环。可以通过添加例如休眠等操作使它更复杂。
清单 7. 当 JDB 响应时,继续遍历循环main[1] main[1] stop at JNITest:58
Deferring breakpoint JNITest:58.
It will be set after the class is loaded.
main[1]
步骤 3. 在完成了步骤 2 之后,就可以在 GDB 中停止循环,继续进行调试。这里,我已经在 goTest() 方法的末端设置了一个断点,使所有的 JNI 调用都可以执行。
清单 8. 断点使所有的 JNI 调用执行(gdb) print loop
$1 = 0
(gdb) set loop=1
(gdb) next
42 goTest(pEnv);
(gdb) step
goTest (pEnv=0x3f4e58) at main.c:53
53 javaClass = (*pEnv)->FindClass(pEnv,"JNITest");
(gdb) list
48
49 jclass javaClass;
50 jmethodID mid;
51 jint result;
52
53 javaClass = (*pEnv)->FindClass(pEnv,"JNITest");
54
55 mid = (*pEnv)->GetStaticMethodID(pEnv,javaClass,"java_tripleNumber",'(I)I");
56
57 result = (*pEnv)->CallStaticIntMethod(pEnv,javaClass,mid,42) ;
(gdb) break main.c:58
Breakpoint 2 at 0x401474: file main.c, line 58.
(gdb) c
Continuing.
更多精彩
赞助商链接