最近想看看openjdk jvm的源码执行一个class文件的入口函数是java.c但是我现在不知道如何将这个文件放入VS中调试有人调试成功过么?

解决方案 »

  1.   

    研究main.c里的代码,可以自己截取关键语句写一个加载模块。加载自己生成的debug版本的dll即可。
      

  2.   

    谢谢你的回复你的意思是我先看懂main.c是如何调用jvm.dll的 
    然后我自己写代码 调用debug版本的jvm.dll来调试jvm的代码?
      

  3.   

    是的。
    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里面的代码了。
      

  4.   

    或者用这里面的例子:http://www.360doc.com/content/10/0209/10/59141_15507397.shtml
    利用jni直接加载jvm,也可以跟踪。不过建议使用openjdk6,如果是openjdk7可能出现问题。
      

  5.   


    c,c++忘的都差不多了 看到openjdk代码后直接晕倒 感觉有些无从下手再次感谢 ZangXT的热心指点 让我了解了学习openjdk jvm的方法