首页
学习
活动
专区
工具
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 版权声明:本文内容互联网用户自发贡献,该文观点仅代表作者本人。...发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

79520

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路径下有Redclass文件所以loader1可以加载,因此载Red构造方法打印加载为loader1.

77361

【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 核心是无效 ;

84730

java 自定义加载_Java如何自定义加载

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

1.3K10

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

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

43430

加载加载过程

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

16730

自定义加载

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

41710

自定义加载

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)来加载

64040

自定义加载

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

1.6K21

自定义加载

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

1K20

Java加载

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

51120

JVM加载

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

44760

Java加载

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

74420

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

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

42910

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

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

92220

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

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

36720

1.3 自定义加载

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

87120

深入理解Java加载机制与自定义加载

1.1 加载(Loading)加载阶段是指将字节码文件加载到内存。这个过程通常是加载(ClassLoader)来完成。...Java虚拟机(JVM)提供了三种内置加载:Bootstrap ClassLoader: 负责加载Java核心库,java.lang包。...初始化是按需进行,只有当访问静态成员或者调用静态方法时,才会触发初始化。2. 自定义加载有时,我们需要在运行时动态加载,或者实现一些自定义加载逻辑。这时就需要自定义加载。...但是,Java加载还提供了loadClass方法。它们之间主要区别在于:findClass是用于查找字节码方法,通常子类实现。...这个方法会尝试加载指定名称,如果失败会调用父加载loadClass方法。loadClass是用于加载方法,它在加载层次结构是负责委托给父加载加载

29620

加载方法_JS加载

==c2); // true 同一个加载加载同名,第一次加载加载会缓存到加载缓存,再次加载直接在缓存读取,两次加载是同一个 //直接获取加载...} } 在应用程序,默认我们获取上下文类加载、类型对象getClassLoader都是采用同一个应用程序加载在第一次被加载后会缓存到加载缓存,由于是同一个加载此时同名不能被多次加载...如果我们想加载自定义路径下,需要用到自定义加载,可以去指定路径下加载,且通过创建多个加载对象,加载同名相互隔离,也就是说同名可以被多个自定义加载对象加载。...,会得到不同类型对象 c3.newInstance(); //会初始化 } } //自定义加载 加载D盘下 class MyClassLoader extends ClassLoader...",e); } } } 使用自定义加载,创建多个加载对象去加载同一个,会得到多个类型对象。

5.8K10
领券