使用GDB调试JNI代码
2012-03-07 16:41
330 查看
本文链接:http://blog.csdn.net/kongxx/article/details/7329515
最近在碰到一段JNI代码不停的出现core dump,用gdb看了一下core文件,信息也不是很清楚,于是想到了运行是debug JNI代码
,对于JNI代码要想动态debug还是有点小工作要做的,如下:
1. 首先修改java参数,添加-Xdebug -Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=n作为java参数,其中8888是端口号,suspend=n意思是java启动的时候不等待客户端debug连接,如果自己的程序是在一启动就需要调用JNI,这里可以将其值设置为suspend=n,这样java进程就会启动,然后等待客户端比如eclipse去远程调试,等于eclipse的远程调试连接后,java才会继续往下走,所以修改后的运行命令类似下面的语句
3. 等到eclipse连接后,在命令行看一下上面启动的java程序的进程PID;
4. 使用gdb连接上面的进程,命令如下
最近在碰到一段JNI代码不停的出现core dump,用gdb看了一下core文件,信息也不是很清楚,于是想到了运行是debug JNI代码
,对于JNI代码要想动态debug还是有点小工作要做的,如下:
1. 首先修改java参数,添加-Xdebug -Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=n作为java参数,其中8888是端口号,suspend=n意思是java启动的时候不等待客户端debug连接,如果自己的程序是在一启动就需要调用JNI,这里可以将其值设置为suspend=n,这样java进程就会启动,然后等待客户端比如eclipse去远程调试,等于eclipse的远程调试连接后,java才会继续往下走,所以修改后的运行命令类似下面的语句
$ java -Xms64m -Xmx512m -Xdebug -Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=n MyClass2. 在java中需要调用JNI代码的地方设置断点,然后使用eclipse远程调试连接java程序运行的机器和端口;
3. 等到eclipse连接后,在命令行看一下上面启动的java程序的进程PID;
4. 使用gdb连接上面的进程,命令如下
$ gdb -p <pid>5. 设置断点在需要调试的JNI方法位置,如下:
(gdb) break <method_name>6. 然后就可以使用各种gdb命令来调试和打印各个变量了。
相关文章推荐
- 使用GDB调试JNI代码
- 如何使用Eclipse和GDB对JNI代码进行调试(JAVA和C)
- 使用GDB调试JNI代码
- 使用GDB调试JNI代码
- Android无源码调试Native代码(使用GDB)
- 使用GDB调试PHP代码,解决PHP代码死循环
- linux 下 android ndk-gdb 调试 jni 中的c 代码
- 如何使用gdb调试代码(一、A Globla view of GDB )
- debug tensorflow / 使用gdb调试tensorflow底层C++代码
- Android无源码调试Native代码(使用GDB)
- Android平台使用GDBServer 调试Native C代码
- 使用GDB 单步调试Android本地代码
- 使用gdb调试内嵌汇编的代码
- GDB代码调试与使用
- 使用GDB调试PHP代码,解决PHP代码死循环问题
- 如何使用gdb调试android webkit内核代码
- Android使用ndk-gdb调试jni程序
- 使用GDB调试PHP代码,解决PHP代码死循环问题
- linux 下 android ndk-gdb 调试 jni 中的c 代码
- 关于VS 使用GDB工具调试ADT下JNI时遇到的一些问题的解决