首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在JDI中调试由自定义类加载器加载的类

在JDI中调试由自定义类加载器加载的类,可以按照以下步骤进行:

  1. 确保已经正确配置了JDI环境,包括安装了Java开发工具包(JDK)和调试器接口(JDI)。
  2. 创建一个自定义类加载器,继承自java.lang.ClassLoader类,并重写findClass方法。在findClass方法中,根据需要加载的类名,使用自定义的方式加载类的字节码。
  3. 在调试代码中,使用JDI提供的VirtualMachineManager类获取当前正在运行的虚拟机实例。
  4. 使用VirtualMachine实例的allClasses方法获取当前虚拟机中加载的所有类。
  5. 遍历所有类,找到由自定义类加载器加载的类。可以通过判断类的ClassLoader实例是否为自定义类加载器来进行识别。
  6. 对于找到的自定义加载的类,可以使用VirtualMachine实例的eventRequestManager方法创建一个ClassPrepareRequest对象,并设置类过滤器为自定义加载的类名。
  7. 使用ClassPrepareRequest对象的enable方法启用该请求。
  8. 在调试代码中,使用VirtualMachine实例的eventQueue方法获取事件队列。
  9. 使用EventQueue实例的remove方法获取下一个事件。
  10. 对于ClassPrepareEvent事件,可以通过event中的referenceType方法获取到已加载的类。
  11. 使用ReferenceType实例的methods方法获取类中的所有方法。
  12. 遍历所有方法,可以通过Method对象的name方法获取方法名,从而找到需要调试的方法。
  13. 使用VirtualMachine实例的eventRequestManager方法创建一个BreakpointRequest对象,并设置断点位置为需要调试的方法。
  14. 使用BreakpointRequest对象的enable方法启用该请求。
  15. 在调试代码中,使用VirtualMachine实例的resume方法启动虚拟机。
  16. 当虚拟机执行到断点位置时,会触发BreakpointEvent事件。
  17. 可以通过BreakpointEvent事件中的thread方法获取到当前线程。
  18. 使用ThreadReference实例的frames方法获取当前线程的调用栈。
  19. 遍历调用栈,可以通过StackFrame对象的location方法获取到当前执行的方法和行号。
  20. 可以通过StackFrame对象的visibleVariables方法获取当前方法的局部变量。

通过以上步骤,可以在JDI中调试由自定义类加载器加载的类。在调试过程中,可以使用JDI提供的各种方法和事件来获取所需的信息,并进行断点调试和变量查看等操作。

请注意,以上答案中没有提及具体的腾讯云产品和产品介绍链接地址,因为在这个问题中没有明确要求提及相关云计算品牌商的信息。如有需要,可以根据实际情况选择适合的腾讯云产品进行调试和部署。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

自定义类加载器加载jar包_类加载器的可见性

大家好,又见面了,我是你们的朋友全栈君。...spring根本不会去管自己被放在哪里,它统统使用TCCL来加载类,而TCCL默认设置为了WebAppClassLoader,也就是说哪个WebApp应用调用了spring,spring就去取该应用自己的...这在真正理解线程上下文类加载器(多案例分析)中已有详细描述。 因此,为了使spring使用自定义的类加载器进行加载,需要开一个线程,将这个线程的类加载器设置为自定义类加载器。...(多案例分析) saturn java 热加载(二)资源文件 spring & logback 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

83520

Java类加载器(用户自定义类加载器实现)

java类加载器主要分为如下几种: jvm提供的类加载器 根类加载器:底层实现,主要加载java核心类库(如:java.lang.*) 扩展类加载器:使用java代码实现,主要加载如:jre/lib/ext...(父类加载器为扩展类加载器) 用户自定义类加载器:去继承ClassLoader类实现自定义类加载器。 类加载器负责将java字节码文件加载到虚拟机内存中也就是类的生命周期的装载过程。...类的生命周期图 下面是用户自定义类加载器的实现过程及代码: 实现一个用户自定义类加载器需要去继承ClassLoader类并重写findClass方法,代码如下 package com.space;import...我们调用了loader2去加载Red类但Red类却打印出由loader1加载,这是由于类加载器秉承的是父委托机制loader2在创建时包装了loader1为其父类加载器,而loader1创建时由于调用的是没有传入父类加载器的构造方法...因此几个加载器的关系如下: ? 由于loader1的路径下有Red类class文件所以loader1可以加载,因此载Red类构造方法中打印的类加载器为loader1.

80961
  • 【Android 逆向】类加载器 ClassLoader ( 启动类加载器 | 扩展类加载器 | 应用类加载器 | 类加载的双亲委托机制 )

    文章目录 一、类加载器 二、类加载的双亲委托机制 一、类加载器 ---- Java 虚拟机 ClassLoader 类加载器 : Bootstrap ClassLoader : 启动类加载器 , 该 加载器由...C/C++ 实现 , 加载 Java 的核心类库 , 如 java.lang 包下的系统类 ; Java 中无法和获取 ; Extention ClassLoader : 扩展类加载器 , 加载 /lib.../ext 下的类 , Java 中可以获取 , 其实现类为 ExtClassLoader ; Application ClassLoader : 应用类加载器 , 加载开发者开发的类 , Java 中可以通过...ClassLoader 应用类加载器 Application ClassLoader 自定义类加载器 Custom ClassLoader 在双亲委托机制中 , 上层的类加载器 是 下层类加载器 的父类...无法 被替代 , 系统类只能由 启动类加载器 Bootstrap ClassLoader 加载 , 应用类加载器 加载被篡改的 Java 核心类是无效的 ;

    89130

    java 自定义的类加载器_Java如何自定义类加载器

    如何自定义类加载器 如果想要编写自己的类加载器,只需要两步: 继承ClassLoader类 覆盖findClass(String className)方法 ClassLoader超类的loadClass...下面是自定义类加载器的一种实现方式: public class CustomClassLoader extends ClassLoader { protected Class> findClass(...在更复杂的案例中,使用的往往是加密过的类文件,加载该类字节码时,还需要解密。不然它们就不能由标准虚拟机来执行,也不能轻易被反汇编。...void setContextClassLoader(ClassLoader loader):为该线程中的代码设置一个类加载器,以获取要加载的类。...如果在启动一个线程时没有显式地设置上下文类加载器,则使用父线程的上下文类加载器。 参考文献《Java 核心技术 卷二》 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    1.4K10

    用户自定义类加载器下载_spring类加载器顺序

    大家好,又见面了,我是你们的朋友全栈君。 在Java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们还可以自定义类加载器,来定制类的加载方式。...为什么要自定义类加载器?...隔离加载类 修改类加载的方式 扩展加载源 防止源码泄漏 用户自定义类加载器实现步骤: 开发人员可以通过继承抽象类ava.1ang.ClassLoader类的方式,实现自己的类加载器,以满足一些特殊的需求...,而是建议把自定义的类加载逻辑写在findclass()方法中 在编写自定义类加载器时,如果没有太过于复杂的需求,可以直接继承URIClassLoader类,这样就可以避免自己去编写findclass(...)方法及其获取字节码流的方式,使自定义类加载器编写更加简洁。

    45330

    类加载器与类的加载过程

    类加载器子系统作用 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。...除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射) 类加载器ClasLoader角色 class file存在于本地硬盘上...由其他文件生成,典型场景:JSP应用 从专有数据库中提取.class文件,比较少见 从加密文件中获取,典型的防Class文件被反编译的保护措施 链接阶段  验证(Verify): 目的在子确保...由于Java采用的是懒加载策略,只有当我们需要用到这个类的时候才会去加载他  初始化阶段就是执行类构造器方法()的过程。...此方法不需定义,是javac编译器自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并而来。 构造器方法中指令按语句在源文件中出现的顺序执行。 ()不同于类的构造器。

    18330

    类加载器 超详解:什么是类加载器,类加载器作用及应用场景,类加载时机,类加载的完整过程,类加载器分类

    JDK中默认提供或者自定义(重点关注):JDK中默认提供了多种处理不同渠道的类加载器,程序员也可以自己根据需求使用Java语言定制。...它是JVM的一部分,负责加载Java核心类库,如java.lang包中的类。它是最顶层的类加载器,通常使用C++实现,无法在Java代码中直接获取到。...加载应用classpath中的类,包括我们自己写的类,还有第三方Jar包的类自定义类加载器(Java实现):可以通过继承 java.lang.ClassLoader 类来自定义类加载器,需要重写findClass...这是因为启动类加载器在JDK8中是由C++语言来编写的,在Java代码中去获取既不适合也不安全,所以才返回null(String类确实是由启动类加载器加载的,但是启动类加载器由虚拟机底层实现、没有存在Java...代码中,无法通过Java代码获取底层的虚拟机启动类加载器)在Arthas中可以通过sc -d 类名的方式查看加载这个类的类加载器详细的信息,如通过上图可以看到,java.lang.String类的类加载器是空的

    11910

    自定义类加载器

    1、为什么需要自定义类加载器 在《类加载器》中讲的,默认类加载器只能加载固定路径下的class,如果有特定路径下的class,需要自定义 安全性:系统自身需要一些jar,class,如果业务类代码中也有相同的...class,破坏系统,类似双亲委托安全性 可以看看tomcat自定义类加载器的原因,别的就大同小异了 a)、要保证部署在tomcat上的每个应用依赖的类库相互独立,不受影响。...2、自定义加载器 这儿主要说下我司的自定义类加载器;更复杂点的可以看看tomcat的类加载机制 为什么需要自定义类加载器?....loadClass方法中,如果本加载器没有load到对应的类,则会检查该类是否处于平台类加载器白名单中: 2.2.1.如果处于白名单中,则委派PlatformClassLoader加载 2.2.2.否则...那么问题来了,SPI的接口是Java核心库的一部分,是由启动类加载器(Bootstrap Classloader)来加载的;SPI的实现类是由系统类加载器(System ClassLoader)来加载的

    69040

    自定义类加载器

    # 自定义类加载器 自定义类加载器的实现与作用 # 为什么需要自定义类加载器 自定义类加载器是从实际场景出发,解决一些应用上的问题,比如: 热部署、插件化类:常用的比如SpringBoot-devtools...如Java模块化规范 OSGi、蚂蚁金服的类隔离框架SOFAArk 非标准化来源加载代码:编译后的字节码在数据库、云端等情况 # 双亲委派模型 想要自定义类加载器,一定需要了解双亲委派模型 双亲委派模型加载...避免了用户自己编写的类与Java的核心类冲突,如自定义了java.lang.String.class类不会被系统加载,因为顶层启动类加载器会先于自定义加载器加载该类,防止核心API被修改 避免类的重复加载...,会先初始化父类ClassLoader,其中会把自定义类加载器的父类加载器设置为应用程序类加载器AppClassLoader CustomClassLoader classLoader...,会先初始化父类ClassLoader,其中会把自定义类加载器的父类加载器设置为应用程序类加载器AppClassLoader CustomClassLoader classLoader

    46510

    自定义类加载器

    为什么需要自定义类加载器自定义类加载器是从实际场景出发,解决一些应用上的问题,比如:热部署、插件化类:常用的比如SpringBoot-devtools和Arthas等工具,其实现原理就用到了类加载机制加密...如Java模块化规范 OSGi、蚂蚁金服的类隔离框架SOFAArk非标准化来源加载代码:编译后的字节码在数据库、云端等情况双亲委派模型想要自定义类加载器,一定需要了解双亲委派模型双亲委派模型加载class...避免了用户自己编写的类与Java的核心类冲突,如自定义了java.lang.String.class类不会被系统加载,因为顶层启动类加载器会先于自定义加载器加载该类,防止核心API被修改避免类的重复加载...,会先初始化父类ClassLoader,其中会把自定义类加载器的父类加载器设置为应用程序类加载器AppClassLoade CustomClassLoader classLoader =...,会先初始化父类ClassLoader,其中会把自定义类加载器的父类加载器设置为应用程序类加载器AppClassLoade CustomClassLoader classLoader =

    1.2K20

    自定义类加载器

    加载是虚拟机将.class文件加载到内存中供程序使用 注: 通常我们说的类加载是是类的生命周期中加载、连接、初始化三个阶段。...类加载器 Java中类的加载都是在运行期执行,这种方式会带来一定的性能开销,但是也增加了应用程序的灵活性。...类的加载自然离不开类加载器,Java中类加载器分为启动类加载器,扩展类加载器,系统类加载器,自定义类加载器。其中启动类加载器为顶级加载器,自定义类加载器最低。...加载其他途径来源的Class文件,因为默认类加载器只能加载固定路径下的class,如果有特定路径下的class,需要自定义 实现自定义类加载器 首先我们来写两个简单的类,供我们测试 public class...首先我们自定义类继承ClassLoader,构造器中super(null)是为了将ClassLoader中parent设置为null。

    1.7K21

    深入理解Java类加载机制-自定义类加载器

    打破双亲委派 Java类加载器的实现采用双亲委派原则,通过双亲委派原则,我们可以很好的保护Java程序在运行时的安全,越基础的类越会被上层的类加载器(例如启动类加载器)加载, 但是这种双亲委派在有些时候也会成为约束...其实上述情况在Java中已经存在,典型的例子便是JDNI服务,JDNI服务的代码由启动类加载器去加载(rt.jar),但在具体的实现时则需要调用各个厂商的具体实现,这些具体实现 (SPI,Service...实现加载器 为了更好的巩固类加载器,我们特地自实现一个自己的类加载器,该类加载模拟的是ServiceLoader,ServiceLoader通常用在SPI机制里面,它打破了双亲委派机制, 使得父类加载器可以访问子类加载器加载的类...管理类,client可使用它获取具体的Driver,并且执行相关方法 ServiceLoader:自定义的类加载器 classloader-core模块在运行时我会设置使用ExtClassLoader进行加载...本期自定义类加载器介绍到这,我们下期再见!!!

    47710

    Java中的类加载器

    然而,有些场景并不是从本机硬件设备或网络上加载类,因此我们需要自定义class loader来处理。 在本小节,我们将介绍自定义加载器的一些场景,也会介绍如何创建一个自定义加载器。...自定义classloader的场景 自定义classloader不仅仅只用于在运行时加载类,还有这么一些场景: 用于更新已存在的字节码,如:编织代理(weaving agent)。...根据需求动态创建类,如:在JDBC中通过加载类来完成不同驱动程序之间的切换。...在加载具有相同类名、包名的类的字节码时实现类的版本控制机制,可以通过URL类加载器(通过URL加载jar)或自定义加载器。 还有很多自定义加载器可以派上用场的例子。...然而,有时当JVM核心类需要加载由开发人员提供的类或资源时,我们可能会遇到问题。 例如,在JNDI中,其核心功能由 rt.jar 中的引导类实现。

    78320

    Java中类加载器

    ClassLoader.getSystemClassLoader(); 如果程序中没有自定义类加载器,那么应用程序类加载器就为该程序的默认类加载器。...这样在双亲-孩子委派链中,启动类加载器是最可信任的-核心Java API它会检查每一个被加载的类,然后依次到扩展类加载器、应用程序类加载器、自定义类加载器。...在java.lang这个包中,没有这个类,所以不能加载。按照双亲委派模型当父类加载器不能加载时,子类加载器尝试加载。依次类推,其它的类加载器也不能加载这个类。于是由用户自定义的类加载器来加载这个类。...因此 java.lang包的中的类是由启动类加载器加载的,而java.lang.Virus是由自定义类加载器加载的。所以这些类型不属于同一个运行时包。...运行时包:它指由同一个类加载器加载的,属于同一个包的,多个类型集合。

    53020

    JVM中的类加载器

    类加载器   把类加载阶段中的"通过一个类的全限定名来获取描述此类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类,实现这个动作的代码模块称为类加载器。...自定义类加载器   现在有个需求在项目中我们需要加载一个特定目录下的class文件【c:\tools\myClassLoader】,这时我们需要自己来定义特定的类加载器。...双亲委派模型   通过ClassLoader中的loadClass方法我们发现类加载器加类的时候有既定的原则,而且系统提供的类加载器好像也不止一个,我们就来说下这块。...(rj.jar) ,无法被java程序直接是使用 2 扩展类加载器Extension ClassLoader 负责加载 \lib\ext目录中或者被java.ext.dirs指定的目录下的类库...,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器完成,每一个层次的类加载器都是如果,因此所有的加载请求最终都应该传递到顶层的启动类加载器中 当父加载器反馈无法加载该类时(搜索范围中没有找到所需的类

    46760

    java 自定义类加载器_JAVA中如何使用应用自定义类加载器「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 最近在研究java CLASS LOADING技术,已实现了一个自定义的加载器。对目前自定义加载器的应用,还在探讨中。...而这个字节码文件,也就是我们平时所看到的每一个.class文件。 这是我们大家都知道的常识,也就是由.java文件,经过编译器编译,变成JVM所能解释的.class文件。...JAVA的灵活性使反编译变得容易,同时,也让我们的加密解密的方法变得灵活。 利用自定义的CLASSLOADER JAVA中的每一个类都是通过类加载器加载到内存中的。...对于类加载器的工作流程如下表示: 1.searchfile() 找到我所要加载的类文件。...(加载的过程其实很复杂,我们现在先不研究它。) 从这个过程中我们能很清楚的发现,自定义的类加载能够很轻松的控制每个类文件的加载过程。

    94420

    请你详细说说类加载流程,类加载机制及自定义类加载器

    请你详细说说类加载流程,类加载机制及自定义类加载器 一、引言 当程序使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、链接、初始化三个步骤对该类进行类加载。...二、类的加载、链接、初始化 1、加载 类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对象。类的加载过程是由类加载器来完成,类加载器由JVM提供。...四、类加载机制 1、JVM主要的类加载机制。 全盘负责:当一个类加载器负责加载某个Class时,该Class所依赖和引用的其他Class也由该类加载器负责载入,除非显示使用另一个类加载器来载入。...2、类加载流程图 图中红色部分,可以是我们自定义实现的类加载器来进行加载。 五、创建并使用自定义类加载器 1、自定义类加载分析 除了根类加载器,所有类加载器都是ClassLoader的子类。...所以,为了不影响类的加载过程,我们重写findClass方法即可简单方便的实现自定义类加载。 2、实现自定义类加载器 基于以上分析,我们简单重写findClass方法进行自定义类加载。

    16710

    从源码角度学习JVM类加载器及自定义类加载器

    B站搜索“乐哥聊编程“有本篇文章配套视频‍ https://www.bilibili.com/video/BV1cP4y117Qt 类加载器分类 引导类加载器(「Bootstrap ClassLoader...」) 负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,这个加载器是由C++写的,所以我们在java源码里面是找不到它的实现,如果尝试对它进行打印,输出将为空值。...扩展类加载器(「Extension ClassLoader」) 负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR 类包,也可以使用java.ext.dirs来指定路径,一般保持默认就好...应用程序类加载器(「Application ClassLoader」) 负责加载类路径下的jar包和class文件,我们自己写的代码都是通过这个类加载加载的 自定义类加载器 我们自己去实现的类加载器,其父类加载器为应用程序类加载器...类加载器之间的关系 验证类加载器加载的路径 package com.lglbc.day1; import sun.misc.Launcher; import java.net.URL; /**

    38620

    1.3 自定义类加载器

    前面说了类加载器的双亲委派机制, 也知道了一个类是如何被类加载器加载进来的. 接下来. 我们来看一看如何自定义类加载器 一....对于我们自定义的类加载器来说需要做到两点即可 1. 这个自定义的类加载器继承自ClassLoader 2....这个类加载器要重写ClassLoader类中的findClass()方法 下面我自己定义了一个类加载器 ?...这里有两步操作, 第一个是: 从类路径中读取要加载类的文件内容, 自定义 第二个是: 调用构造类的方法, 调用的系统的defineClass 记下来来看看自定义的loadByte是如何实现的 ?...我们来看一下源码 我们自定义的类加载器, 继承自ClassLoader类加载器, 那么在加载自定义类加载器之前, 应该先加载父类ClassLoader.

    89720
    领券