`
李静波
  • 浏览: 53831 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

调试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中不需要。
分享到:
评论
3 楼 dengyigang 2008-08-31  
http://dengyigang.iteye.com/blog/235051
JNative 调用 dll时候,JDK报“Java VM”错误!
请帮忙解决一下!谢谢:)
2 楼 李静波 2006-12-25  
rayen_zhang:
  请参见 http://leejingbo.iteye.com/blog/40581
1 楼 rayen_zhang 2006-12-22  
请问,选项 core compiler1 compiler2的区别是什么?

相关推荐

    jvm.dll文件

    `jvm.dll` 文件是Java虚拟机(JVM)的核心组件,它是Java运行时环境(Java Runtime Environment, JRE)的一部分。当你在尝试运行一个Java应用程序时,如果出现“无法加载 `jvm.dll`”的错误,通常意味着系统无法找到...

    hsdis.dll.zip

    hsdis.dll是特定于Java的一个动态链接库,全称为HotSpot Service Disassembler,它是Oracle JDK中用于Java字节码反汇编的工具,尤其对于理解和调试Java虚拟机(JVM)的行为非常有帮助。 hsdis.dll的工作原理是将...

    hsdis-amd64.dll

    在Java开发领域,深入了解字节码的运行机制对于优化程序性能、调试问题以及学习JVM内部工作原理至关重要。hsdis-amd64.dll是这样一个工具,它是HotSpot虚拟机的一个插件,用于将Java字节码反汇编为更易读的x86-64...

    libzmq_d.dll和jzmq.dll

    在Java项目中,要使用这两个dll文件,你需要将它们放置在系统的PATH环境变量所包含的目录下,或者直接放在Java虚拟机(JVM)可找到的地方,例如与你的Java可执行文件同一目录。如果你使用的是IDE(如Eclipse或...

    java 串口开发需要的64位 rxtxSerial.dll

    对于64位系统,你需要64位版本的`rxtxSerial.dll`,因为它与运行在64位JVM上的Java应用程序兼容。这个动态链接库(DLL)是RXTX库在Windows平台上的实现,用于处理串行I/O操作。 使用RXTX库进行Java串口开发,首先...

    hsdis-amd64.dll和hsdis-i386.dll

    hsdis-amd64.dll和hsdis-i386.dll是与Java虚拟机(JVM)相关的动态链接库文件,主要用于Java性能分析和调试。这两个文件分别对应于AMD64(也称为x86_64或64位)和i386(32位)架构的处理器。在Java世界中,JVM是运行...

    hadoop2.7.3的32位的hadoop.dll和winutils.exe

    虽然Hadoop主要设计为在Linux集群上运行,但在Windows环境下也可以通过一些优化手段提高性能,例如使用合适的JVM参数、调整HDFS的块大小、开启本地化缓存等。 总之,`hadoop.dll`和`winutils.exe`是Hadoop在...

    JNIRegistry.dll的64位和32位

    ICE_JNIRegistry可能是一个特定的实现或者工具,用于处理与JNIRegistry.dll相关的任务,比如调试、优化或者提供额外的功能。由于信息有限,无法详细阐述其具体功能,但在实际开发中,这样的工具可能包括错误检查、...

    IKVM.OpenJDK.ClassLibrary.dll

    7. **调试与问题解决** - 如果在使用IKVM.NET过程中遇到问题,可以查看IKVM.NET的官方文档,或者在相关的开发者社区寻找帮助。错误信息通常会包含有关不兼容或未找到的类的详细信息,这对于定位问题非常有帮助。 8...

    hsdis-amd64.dll 插件

    需要注意的是,这可能会增加JVM的运行开销,因此只应在调试和性能分析时使用。 总的来说,hsdis-amd64.dll插件是Java开发者的一把利器,它提供了深入理解JVM内部工作原理的途径,有助于优化代码性能。通过解析汇编...

    JVM崩溃

    标题中的“JVM崩溃”指的是Java虚拟机(Java Virtual Machine)在运行过程中遇到了无法处理的错误,导致程序异常终止的现象。...通过对错误日志的深入解读和调试,通常能找出问题并采取相应的修复措施。

    winutils.exe和hadoop.dll

    - 提供Hadoop集群的相关信息,如节点状态、JVM内存信息等。 - 支持Hadoop MapReduce作业的提交和监控。 2. **hadoop.dll**: hadoop.dll是Hadoop在Windows下的动态链接库,它包含了Hadoop运行时所需的一些核心...

    IDEA工具jprofiler插件(JVM分析利器)

    7. **远程连接(Remote Profiling)**:除了本地应用,JProfiler还支持远程连接到其他服务器上的JVM,方便在分布式环境中进行性能调试。 8. **会话管理(Session Management)**:用户可以保存和加载分析会话,便于...

    hsdis-amd64.dll 资源下载

    这个工具允许开发者查看JIT编译后的机器码,对于理解性能问题、优化代码或者调试JVM行为非常有帮助。尤其是在分析JIT编译器如何优化代码时,hsdis-amd64.dll提供了宝贵的洞察力。 使用hsdis-amd64.dll通常涉及到...

    window下的hadoop-2.8.1版本的hadoop.dll跟winutils.exe文件

    在运行Hadoop的Windows环境中,可能会遇到如文件权限问题、端口冲突、JVM兼容性等问题。解决这些问题需要对Windows系统和Hadoop的运行机制有深入理解。同时,由于Windows下的Hadoop生态不如Linux丰富,因此在某些...

    hsdis-i368.dll

    《深入理解hsdis-i368....它不仅提供了透明度,使我们能够看到JVM内部的工作细节,还为性能分析和调试提供了宝贵的资料。通过熟练掌握和应用hsdis-i368.dll,开发者可以更有效地优化Java应用程序,提高系统的整体性能。

    jvm监控工具visualVM

    VisualVM是一款强大的JVM(Java Virtual Machine)监控和性能分析工具,由Oracle公司开发并提供。它集成在Java SDK中,默认位于%JAVA...无论是调试、性能调优还是日常监控,VisualVM都是Java开发者不可或缺的工具之一。

    hsdis-amd64.dll,放在<JAVA-HOME>/jre/bin目录下

    hsdis-amd64.dll是Java虚拟机(JVM)中的一个动态链接库,主要用于Java HotSpot虚拟机的性能分析和调试。这个库文件在64位Windows操作系统上使用,帮助开发者理解Java代码如何被JVM编译为本地机器代码,从而进行更...

    hsdis-amd64.dll.rar

    标题中的"hsdis-amd64.dll.rar"指的是一个RAR压缩包文件,包含hsdis-amd64.dll这个动态链接库(DLL)文件,专用于查看Java代码的底层汇编指令。DLL文件是Windows操作系统中的一种共享库,它包含可由多个程序同时使用...

Global site tag (gtag.js) - Google Analytics