Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3399157
  • 博文数量: 864
  • 博客积分: 14125
  • 博客等级: 上将
  • 技术积分: 10634
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-27 16:53
个人简介

https://github.com/zytc2009/BigTeam_learning

文章分类

全部博文(864)

文章存档

2023年(1)

2021年(1)

2019年(3)

2018年(1)

2017年(10)

2015年(3)

2014年(8)

2013年(3)

2012年(69)

2011年(103)

2010年(357)

2009年(283)

2008年(22)

分类: Java

2012-03-03 10:22:03

VM启动时需要一些启动参数,包含标准参数和非标准参数。这里涉及到两个标准参数:-Xcheck:jni和-verbose:jni。

这两个参数都设置的话,JNI调用路径就可以由dalvikvm打印出来,并通过logcat看到。

可以在下面这个文件中控制是否为VM添加这两个启动参数。

/frameworks/base/core/jni/AndroidRuntime.cpp

先看一下第一个代码片段

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 property_get("dalvik.vm.checkjni", propBuf, "");   if (strcmp(propBuf, "true") == 0) {   checkJni = true;   } else if (strcmp(propBuf, "false") != 0) {   /* property is neither true nor false; fall back on kernel parameter */   property_get("ro.kernel.android.checkjni", propBuf, "");   if (propBuf[0] == '1') {   checkJni = true;   }   }

“dalvik.vm.checkjni”和ro.kernel.android.checkjni这两个系统属性控制着变量checkJni,而checkJni这个变量的意义在于:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 if (checkJni) {   /* extended JNI checking */   opt.optionString = "-Xcheck:jni";   mOptions.add(opt);   ... ...   /* with -Xcheck:jni, this provides a JNI function call trace */   opt.optionString = "-verbose:jni";   mOptions.add(opt);   }

可以看出,可以checkJni为true,-Xcheck:jni和-verbose:jni这两个VM启动参数就会被用作启动VM。默认状态下,添加-verbose:jni这个参数的两行代码是被注释掉的,如果需要调试的问题和JNI有关,可以把注释打开。

可惜的是,一旦JNI调试被打开,会打印大量的垃圾信息,所以得慎用。我还在继续寻找有没有更高效的方法。
原文链接:http://blog.csdn.net/a345017062/archive/2011/04/28/6369535.aspx

阅读(1328) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~