我在问,因为我无法使用Google找到任何内容。
我想调试org.Example
。我想设置一个断点,然后恢复VM执行直到断点。 org.Example
只是一个虚拟的主要功能。
所以我确实拥有自己的虚拟机,但我找不到找到Location
对象的方法。我将问题简化为无法获得ReferenceType
对象。
我的问题:我有一个简单的命令行调试器,带有一个启动连接器
我将VM的类路径设置为"<Project_DIR>\out\artifacts\javaDebugger_jar\*"
,然后运行要调试的程序。在javaDebugger_jar
文件夹中有多个JAR文件,其中一个包含org/Example.class
文件。
如果我打电话给&#34; vm.resume()&#34;程序将执行。我想在&#34;简历&#34;之前未加载主类。
那么这里的程序是什么?如何确保加载类或者我是否需要在特定类(我知道如何)的方法入口上设置断点,然后将断点设置为类&#34中的方法入口;示例&#34;断点可以设置。
我在问,因为这似乎是如此愚蠢。还有更好的方法吗?
答案 0 :(得分:0)
所以经过一段时间的思考后,这种行为是可以预料的。
我试图在加载任何(非jdk)类之前设置断点。这根本不可能。
我需要注意主方法ans的methd条目然后设置断点。这意味着:
org.Example
已加载。加载此类所依赖的所有类文件。
我知道这只适用于直接依赖的类。我不确定这适用于通过Class.forName
或其他东西加载的JDBC驱动程序。
对我来说这个解决方案就足够了。如果你有一个补充如何找到这样的类(动态加载的类),也请回答这个问题。
答案 1 :(得分:0)
您可以通过虚拟机的事件请求管理器创建“类准备请求”,以便在准备好类时收到通知:
EventRequestManager erm = machine.eventRequestManager();
erm.createClassPrepareRequest().enable();
这将为您在VM上准备任何类时提供一个事件,无论它是如何加载的。您可以设置过滤器,以便仅在需要时通知特定类。您可能希望设置挂起策略,如果您依赖它,以便在加载类时设置断点。