我们这里有使用 Java JNI 调用 C 库中的函数的系统。一切都在 Solaris 上运行。
我在字符串编码的某个地方遇到问题。用 C 编写的函数返回一个阿拉伯字符,但 JNI 方法接收具有另一种编码的字符串。我已经尝试设置 $NLS_LANG 和 vm 参数以相同的方式进行编码,但没有任何效果。所以我需要能够同时调试 C 代码和 Java JNI。
调试它的最佳方法是什么?
我们这里有使用 Java JNI 调用 C 库中的函数的系统。一切都在 Solaris 上运行。
我在字符串编码的某个地方遇到问题。用 C 编写的函数返回一个阿拉伯字符,但 JNI 方法接收具有另一种编码的字符串。我已经尝试设置 $NLS_LANG 和 vm 参数以相同的方式进行编码,但没有任何效果。所以我需要能够同时调试 C 代码和 Java JNI。
调试它的最佳方法是什么?
dbx 调试器(Sun Studio 的一部分)可以附加到 JVM 进程,让您在 Java 代码和本机代码之间单步执行。该功能的代号为“jdbx”,尽管它都是 dbx 的一部分。它还没有被大力推广,所以它可能有错误。当 IDE 有两个调试引擎都处理 Java 时会出现问题,但使用命令行 dbx 可以避免这些问题。
当然,可能有许多更传统的方法来调试您的特定问题,而不必使用可以混合 Java 和 C 代码的源代码级调试。
带有最新 Android 插件的 Eclipse Juno 版本支持调试。
ADT Bundle 现在直接支持这一点。任何告诉您除单击 Debug As-> Android Native Application 之外的其他操作的代码在 2013 年 5 月 12 日都已过时,除非您使用的是较旧的开发系统,否则您会感到头疼。如果是这种情况,请下载并安装最新的 ADT 包,因为它会省去很多麻烦。