本文链接: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才会继续往下走,所以修改后的运行命令类似下面的语句
2. 在java中需要调用JNI代码的地方设置断点,然后使用eclipse远程调试连接java程序运行的机器和端口;
3. 等到eclipse连接后,在命令行看一下上面启动的java程序的进程PID;
4. 使用gdb连接上面的进程,命令如下
5. 设置断点在需要调试的JNI方法位置,如下:
6. 然后就可以使用各种gdb命令来调试和打印各个变量了。
分享到:
相关推荐
标题中的“使用eclipse单步调试jni代码(方法1)”是指使用Eclipse集成开发环境进行JNI(Java Native Interface)代码的调试,这是Android应用开发中处理C或C++原生代码的一种方式。JNI允许Java代码调用本地库,通常...
### 使用Eclipse单步调试JNI代码(方法2) #### 环境配置 为了能够有效地进行JNI代码的调试,首先需要确保以下环境已正确配置: - **ADT Bundle**: Eclipse版本为Juno - **NDK**: 版本r9 - **JDK**: 版本8 - **...
通过这个简单的测试项目"HelloNDK",初学者可以快速了解Android JNI环境的搭建,学习如何在Java和C++之间进行交互,并掌握使用Android Studio进行C++代码断点调试的基本技巧。这不仅有助于深入理解Android应用的内部...
这篇“Android学习笔记——利用JNI技术在Android中调用、调试C++代码”将带你深入理解如何在Android应用中使用JNI来调用C++代码,以及如何进行调试。以下是对这一主题的详细阐述。 1. **JNI简介** JNI是Java平台的...
在开始使用Eclipse+CDT+GDB调试Android NDK程序之前,首先需要确保已经搭建好以下开发环境: 1. **Ubuntu 11.10**:作为主要的操作系统,用于开发和调试Android NDK程序。 2. **Eclipse 3.7 (Indigo) for Java**:...
【Eclipse+CDT+GDB调试Android NDK程序】是一种在Android平台上调试原生C/C++代码的有效方法。在Android应用开发中,有时需要利用NDK(Native Development Kit)来编写高性能或底层的代码,这时就需要使用调试工具来...
下面将详细介绍JNI的基本概念、使用场景、测试用例的常见内容以及如何调试JNI相关的问题。 1. JNI基础概念: JNI是Java平台的一部分,它为Java应用程序提供了一种方式来调用本地(非Java)代码,通常是C/C++,以...
使用GDB调试本地代码(C/C++),可以帮助开发者发现和定位程序中的错误。具体步骤如下: - 编译代码:使用带有-g选项的gcc编译器编译本地代码,生成带有调试信息的可执行文件。 - 启动GDB:运行gdb命令启动GDB调试...
- 调试JNI代码通常较为困难,因为需要在设备或模拟器上运行,并可能涉及系统日志(Logcat)和调试器(如NDK-GDB)的使用。 - 性能优化:虽然JNI提供了直接访问硬件的便利,但频繁的JNI调用会增加系统开销,因此应...
6. **测试与调试**:确保在所有目标平台上都能正确编译和运行,这可能需要编写自动化测试用例,使用GDB等工具进行调试。 7. **安全性和性能**:加密算法的实现必须遵循安全最佳实践,避免安全漏洞。同时,优化代码...
- 调试JNI代码通常使用GDB或者Android Studio集成的NDK调试工具,需要设置断点、查看内存状态和变量值。 - 使用`__android_log_print()`等日志打印函数辅助调试。 6. **注意事项** - ABI兼容性:不同的设备可能...
7. **调试与测试**:由于涉及到跨语言编程,调试JNI代码可能比较复杂。可以使用NDK提供的工具如gdb进行原生代码调试,同时,确保在各种设备和Android版本上进行充分的测试,以保证兼容性和稳定性。 总之,"美图动态...
调试JNI代码可以使用Android Studio的NDK调试功能,或者在PC上使用GDB。设置断点,检查变量,分析调用栈等,帮助找出问题。 10. **性能优化** JNI常用于性能敏感的部分,如图形处理、加密解密等。由于本地代码...
- 调试JNI代码:可以使用NDK提供的工具,如`gdbserver`和`ndk-gdb`进行远程调试。 了解并熟练掌握JNI编程,不仅可以提升Android应用的性能,还能打开与各种系统资源和库交互的通道。《JNI编程指南》和《android-jni...
为了调试和优化JNI代码,Android Studio提供了NDK集成和NDK调试工具。开发者可以使用NDK的`ndk-build`脚本构建原生代码,同时利用Java层的调试器和NDK的gdb来定位和修复问题。 此外,理解JNI的错误处理机制也非常...
8. **调试JNI代码**: - 使用NDK的NDK-gdb工具可以调试本地代码,或者通过Android Studio的远程调试功能进行调试。 - 还可以通过日志(`Log.d()`)在Java和C/C++之间传递信息,辅助排查问题。 9. **性能优化**: ...
这个头文件包含了JNI函数的原型定义,供C++代码使用。 4. **C++工程**: 创建一个C++工程,包含上述头文件,并实现JNI接口。在这里,C++代码将作为桥接,调用C# DLL中的函数。使用`LoadLibrary`和`GetProcAddress`...
对于涉及到C/C++代码的开发,例如JNI开发和安全相关开发,更加建议在Android源代码开发环境进行,这样就可以利用gdb以及gdbclient工具进行调试。这个PPT主要讲Android源代码下载、编译和运行,以及C/C++、Java代码的...
1. **调试难度**:本地代码的调试比Java代码复杂,需要使用GDB或其他本地调试工具。 2. **内存管理**:注意Java和C/C++的内存管理机制差异,防止内存泄漏。 3. **ABI兼容性**:为不同架构生成.so文件,确保应用能在...