我正在使用JDI api(Java 调试接口),我尝试为特定方法的第一行代码创建断点请求,但也在该方法的所有“退出点”上(即在所有“返回... ;")。
要创建断点请求,我需要一个Location
对象(即一种指向可执行代码的指针)
为方法的第一行获取 aLocation
相对容易:
theTargetMethod.allLineLocations().get(0)
获得Location
所有“退出点”的问题更大。仅仅获取方法的最后一行可能是不够的,因为该方法可能return
在主体中间包含多个语句,我也需要捕获这些语句。
我考虑过使用 a MethodExitRequest
,但这会产生大量我不需要的事件,因为它们与类的其他方法相关。(所以它可以完成这项工作,但它会在运行时产生巨大的开销)。
所以我的问题是:我们如何获得一个Location
方法的所有出口点?
编辑
附加信息
对于我的特定用例,我需要为一些方法创建断点请求,并且似乎我感兴趣的所有方法都返回 void,因此可以搜索“return void”指令(b1)方法的字节码并根据字节码中 b1 的所有索引创建一个 Locations 对象。