2013-06-05 4 views
4

Есть ли какой-либо инструмент для анализа статического кода, который обнаруживает ошибки в строках подписи JNI (метода)? Например, что следующий код не синтаксически правильный (отсутствует точка с запятой после полного имени квалифицирован класса):Анализ кода подписи JNI

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

редактировать: Инструмент анализа кода не требуется, чтобы проверить наличие обув/бар/TheClass, но проверяйте только строку для действительного синтаксиса в соответствии со спецификацией JNI.

Основой этого вопроса является то, что приведенный выше код вызвал ошибку сегментации. Это всегда раздражает отладочную ситуацию, но статический анализ должен быть довольно простым в этом случае, экономя много времени.

+0

+1, хороший вопрос! Но не имеет ли API JNI методы для получения имени имени класса в виде строки? (редактирование: есть: 'javap') – fge

+0

@fge право, спасибо. Но это не помогает существующим проектам, и это не удобно при создании нового кода. Это заканчивается использованием copy/paste и не подтверждает правильность кода. – Alexander

+0

Приведенный выше код не должен вызывать ошибку сегментации. Это приведет к ошибке проверки ошибок. Вот где вы должны направлять свое внимание, это и модульное тестирование, всегда важно с JNI. – EJP

ответ

1

Если вам нужен только статический анализ случаев, как в вашем вопросе, где подпись находится непосредственно внутри GetMethodID вызова, вы можете просто написать небольшой скрипт, который идет над файлами код и находит все GetMethodID/GetFieldID вызовов с регулярное выражение, а затем проверяет синтаксис.

Но вы всегда можете использовать опцию -Xcheck:jni (Oracle/IBM) для отладки этих проблем. JNI-вызовы будут медленнее из-за проверки, выполняемой JVM, но требуемая отладочная работа значительно сокращается.

+0

Я не хочу писать это на этот раз ;-) Я уже видел аргумент -Xcheck: jni, который очень полезен, но я бы предпочел использовать метод статического анализа. Спасибо, в любом случае. – Alexander

Смежные вопросы