4

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

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

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

这个问题的背景是,上面的代码触发了分段错误。这总是一个令人讨厌的调试情况,但在这种情况下静态分析应该很容易节省大量时间。

4

1 回答 1

1

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

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

于 2013-06-06T19:40:20.283 回答