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