调试jvm.dll

阅读JVM代码的方法之一就是写一个JNI程序,然后单步跟踪代码。
 
一、编译出jvm.dll的debug版本。
   在我的机器上我用了这个编译命令:build debug compiler1 D:\temp\hotspot C:\Java\jdk1.7.0
   编译的详细方法,可以参考这里
 
二、假设jre安装在:C:\Java\jre1.7.0,那么在C:\Java\jre1.7.0\bin下新建一个目录,目录名称自己定,
   例如我就给它叫做:MyJVM。把debug版的jvm.dll复制到:C:\Java\jre1.7.0\bin\MyJVM
 
   这一步是因为在默认情况下,jvm.dll和JRE其他的dll、jar需要这样一个目录层次关系。
   这也是正式发布的JRE的jvm.dll位于\bin\client下的原因。
 
三、在VS中写一个JNI的应用程序,让exe的输出目录为:C:\Java\jre1.7.0\bin\MyJVM
经过这三步后,编译通过,就可以调试jvm.dll了 

下面的代码是一个JNI应用程序的例子,先加载JVM,然后就释放JVM。
#include "stdafx.h"
#include <string.h></string.h>
#include <windows.h></windows.h>
#include <jni.h></jni.h>
 
#pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'\"")
 
int _tmain(int argc, _TCHAR* argv[])
{
 int res;
 JavaVM *jvm;
 JNIEnv *env;
 JavaVMInitArgs vm_args;
 JavaVMOption options[3];
 vm_args.version=JNI_VERSION_1_2;
 options[0].optionString = "-Djava.compiler=NONE";
 options[1].optionString = "-Djava.class.path=.";
 options[2].optionString = "-verbose:jni";
 
 vm_args.version = JNI_VERSION_1_6;
 vm_args.nOptions = 3;
 vm_args.options = options;
 vm_args.ignoreUnrecognized = JNI_TRUE;
 res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
 if (res < 0)
 {
  fprintf(stderr, "Can't create Java VM\n");
 
  return 1;
 }
 
 jvm->DestroyJavaVM();
 
 fprintf(stdout, "Java VM destory.\n");
 
 return 0;
}
 
其中代码:
#pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'\"")
在VS2005中需要,如果没有上面这行代码,运行会提示:没有找到 MSVCR80.dll
这行代码在VS2003中不需要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值