java - JNI签名代码分析

标签 java c java-native-interface code-analysis

是否有任何静态代码分析工具可以发现 JNI(方法)签名字符串中的错误?例如,以下代码在语法上是不正确的(完全限定类名后缺少分号):

(*env)->GetMethodID(env, someClassId, "aMethod","(ILfoo/bar/TheClass)V");

编辑:代码分析工具不需要检查 foo/bar/TheClass 是否存在,而只是根据 JNI 规范检查字符串的语法是否有效。

这道题的背景是,上面的代码触发了segmentation fault。这总是令人讨厌的调试情况,但静态分析在这种情况下应该非常容易,可以节省大量时间。

最佳答案

如果您只需要对您问题中的案例进行静态分析,其中签名直接在 GetMethodID 调用中,您可以编写一个快速脚本来遍历代码文件并找到所有使用正则表达式的 GetMethodID/GetFieldID 调用,然后验证语法。

但是您始终可以使用 -Xcheck:jni ( Oracle/IBM ) 选项来调试这些问题。由于由 JVM 完成验证,JNI 调用会变慢,但所需的调试工作会大大减少。

关于java - JNI签名代码分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16948806/

相关文章:

java - JNI传递参数给c++的方法

c - C 戏剧节目问题

c - 在预处理输出中保留包含语句

c - 如何在没有换行符的情况下缓冲从大文件读取的数据

c - 如何使用 WM_COPYDATA 在使用 JNI 的 Java 程序之间发送字符串?

java - 错误: HTTP Status 405 - HTTP method GET is not supported by this URL的原因

java - Ant build.xml 不读取环境属性

java - 这种类型的Object意味着什么?

Java Swing - 如何同步 ArrayList

android - OpenCV opencv2/core/core.hpp : No such file or directory