Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JNI签名码分析_Java_C_Java Native Interface_Code Analysis - Fatal编程技术网

Java JNI签名码分析

Java JNI签名码分析,java,c,java-native-interface,code-analysis,Java,C,Java Native Interface,Code Analysis,是否有任何静态代码分析工具可以发现JNI(方法)签名字符串中的错误?例如,以下代码在语法上不正确(完整限定类名后缺少分号): 编辑:代码分析工具不需要检查foo/bar/TheClass的存在,只需要根据JNI规范检查字符串的有效语法 这个问题的背景是,上面的代码触发了一个分段错误。这总是一种令人讨厌的调试情况,但在这种情况下,静态分析应该非常容易,从而节省大量时间。如果您只需要对问题中的情况进行静态分析,其中签名直接位于GetMethodID调用中,您可以编写一个快速脚本,遍历代码文件,用正则

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

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


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

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


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

+1,好问题!但是JNIAPI难道没有方法将类名签名作为字符串检索吗?(编辑:有:
javap
)@fge-right,谢谢。但这对现有项目没有帮助,在创建新代码时也不方便。这最终使用复制/粘贴,不能证明代码的正确性。上述代码不应触发分段错误。事后缺乏错误检查将导致这种情况。这就是你应该集中注意力的地方,这和单元测试,对于JNI来说总是很重要的。@EJP我认为做动态验证来检查完全是静态的问题是没有帮助的。总的来说,我同意,测试是归档代码质量的一种方法,但它不是我问题的重点。如果这是你唯一的选择,它会很有帮助,这似乎是。这次我不想自己写;-)我已经看到了-Xcheck:jni参数,它实际上非常有用,但我更喜欢静态分析方法。无论如何,谢谢你。
(*env)->GetMethodID(env, someClassId, "aMethod","(ILfoo/bar/TheClass)V");