WEB开发网
开发学院软件开发Java 调试集成 Java 和 C/C++ 的代码 阅读

调试集成 Java 和 C/C++ 的代码

 2010-01-25 00:00:00 来源:WEB开发网   
核心提示: 步骤 4.当上述代码运行时,可以看到 JDB 在断点上停止,调试集成 Java 和 C/C++ 的代码(9), 清单 9. JDB 在断点上停止SetdeferredbreakpointJNITest:58Breakpointhit:thread="main",JNITest

步骤 4.当上述代码运行时,可以看到 JDB 在断点上停止。


清单 9. JDB 在断点上停止
Set deferred breakpoint JNITest:58 
Breakpoint hit: thread="main", JNITest.java_tripleNumber(), line=58, bci=0 
 58     System.out.println(" #### java "); 
main[1] 

不透明的 JNI 引用

JNI 引用的不透明度很高 ― 也就是说,不发布它们的结构。如果知道了对象的结构,就可以在内存中看到对象了。

在以下的摘录中,完成 Java 方法调用后,停止了一些 C 语言代码。 result 包含一个 jstring 引用。


清单 10. JNI jstring 引用
Breakpoint 3, goTest (pEnv=0x3f4e50) at main.c:60 
60   } 
(gdb) print result 
$1 = 0x3fda44 

请注意,内存变量( 0x00ad1ac8 )中的地址在下面的清单 11 中显示。如果要从那个位置开始打印内存,可以看到字符串的起点。GDB 的 Cygwin 分发版提供了图形前端(它有内存编辑窗口)— 这样更容易查看字符串。


清单 11. 查看字符串
(gdb) x 0x3fda44 
0x3fda44:    0x00ad1ac8 
(gdb) x/30s 0x00ad1ac8 
0xad1ac8:    "0021" 
0xad1acc:    "" 
0xad1acd:    "" 
0xad1ace:    "" 
0xad1acf:    "" 
0xad1ad0:    "032-" 
0xad1ad4:    "" 
0xad1ad5:    "" 
0xad1ad6:    "" 
0xad1ad7:    "" 
0xad1ad8:    "\022" 
0xad1ada:    "" 
0xad1adb:    "" 
0xad1adc:    "0" 
0xad1ade:    "" 
0xad1adf:    "" 
0xad1ae0:    "\022" 
0xad1ae2:    "" 
0xad1ae3:    "" 
0xad1ae4:    "*" 
0xad1ae6:    "" 
0xad1ae7:    "" 
0xad1ae8:    "C" 
0xad1aea:    "a" 
0xad1aec:    "t" 
0xad1aee:    " " 
0xad1af0:    "s" 
0xad1af2:    "a" 
0xad1af4:    "t" 
0xad1af6:    " " 
(gdb) 

上一页  4 5 6 7 8 9 10  下一页

Tags:调试 集成 Java

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接