有人熟悉openjdk吗? 最近想看看openjdk jvm的源码执行一个class文件的入口函数是java.c但是我现在不知道如何将这个文件放入VS中调试有人调试成功过么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 研究main.c里的代码,可以自己截取关键语句写一个加载模块。加载自己生成的debug版本的dll即可。 谢谢你的回复你的意思是我先看懂main.c是如何调用jvm.dll的 然后我自己写代码 调用debug版本的jvm.dll来调试jvm的代码? 是的。openjdk\jdk\src\share\bin\main.c中跟踪到java.c愁思剥茧,看CreateExecutionEnvironment和LoadJavaVM就是找到并加载jvm.dll。具体的代码和平台相关,比如windows版本就在openjdk\jdk\src\windows\bin\java_md.c中。比如LoadJavaVM: /* Now get the function addresses */ ifn->CreateJavaVM = (void *)GetProcAddress(handle, "JNI_CreateJavaVM"); ifn->GetDefaultJavaVMInitArgs = (void *)GetProcAddress(handle, "JNI_GetDefaultJavaVMInitArgs");上面就是得到jvm.dll中两个函数的地址。如此跟踪,自己做个简单的包装就可以了。那就是加载jvm.dll,导出JNI_CreateJavaVM等函数,然后调用。单步跟踪,就可以跟进hotspot里面的代码了。 或者用这里面的例子:http://www.360doc.com/content/10/0209/10/59141_15507397.shtml利用jni直接加载jvm,也可以跟踪。不过建议使用openjdk6,如果是openjdk7可能出现问题。 c,c++忘的都差不多了 看到openjdk代码后直接晕倒 感觉有些无从下手再次感谢 ZangXT的热心指点 让我了解了学习openjdk jvm的方法 截屏软件截屏时怎样实现截屏区域有方框显示 我已经生成一个jar文件,如何自己改变该jar文件的图标? java环境配置问题 JTextPane插入图片后不能正常显示 关于createImage,能帮上忙的都给分,分不够再加 请问下有没有简单的JSP分页讲解。谢谢 一个简单的键盘按键的问题! jsp后缀的应该怎样打开? 小应用程序与应用程序的转换 小菜鸟求问 Set<>和Iterator<>里面的值到底起的是什么作用?是表示Set遍历的规则吗,求教 求高手给个linux下的正则表达式 Java继承问题
然后我自己写代码 调用debug版本的jvm.dll来调试jvm的代码?
openjdk\jdk\src\share\bin\main.c中跟踪到java.c
愁思剥茧,看CreateExecutionEnvironment和LoadJavaVM就是找到并加载jvm.dll。具体的代码和平台相关,比如windows版本就在
openjdk\jdk\src\windows\bin\java_md.c中。
比如LoadJavaVM: /* Now get the function addresses */
ifn->CreateJavaVM =
(void *)GetProcAddress(handle, "JNI_CreateJavaVM");
ifn->GetDefaultJavaVMInitArgs =
(void *)GetProcAddress(handle, "JNI_GetDefaultJavaVMInitArgs");上面就是得到jvm.dll中两个函数的地址。如此跟踪,自己做个简单的包装就可以了。那就是加载jvm.dll,导出JNI_CreateJavaVM等函数,然后调用。
单步跟踪,就可以跟进hotspot里面的代码了。
利用jni直接加载jvm,也可以跟踪。不过建议使用openjdk6,如果是openjdk7可能出现问题。
c,c++忘的都差不多了 看到openjdk代码后直接晕倒 感觉有些无从下手再次感谢 ZangXT的热心指点 让我了解了学习openjdk jvm的方法