歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

使用GDB調試JNI代碼

最近在碰到一段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才會繼續往下走,所以修改後的運行命令類似下面的語句

  1. $ java -Xms64m -Xmx512m -Xdebug -Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=n MyClass  

2. 在java中需要調用JNI代碼的地方設置斷點,然後使用eclipse遠程調試連接java程序運行的機器和端口;

3. 等到eclipse連接後,在命令行看一下上面啟動的java程序的進程PID;

4. 使用gdb連接上面的進程,命令如下

  1. $ gdb -p <pid>  
5. 設置斷點在需要調試的JNI方法位置,如下:
  1. (gdb) break <method_name>  
6. 然後就可以使用各種gdb命令來調試和打印各個變量了。
Copyright © Linux教程網 All Rights Reserved