Wow, thanks Andrew,

There's certainly some complexity there, I appreciate your guidance.

Regards,

Peter.

On 3/08/2021 7:11 pm, Andrew Dinn wrote:
On 03/08/2021 02:30, Peter Firmstone wrote:
Just curious, when using Agents, what are the recommendations for line numbers in code, for exceptions etc, how are these affected when instrumenting?

For Byteman I use ASM to inject bytecode sequences into methods without any (significant) modification to existing bytecodes. ASM successfully adjusts line number info to allow for the injected code without the need for my agent to take any action.

I also add extra exception handling around injected regions and propagate exceptions through enclosing regions to an outer handler. ASM updates the exception table according to where the method visitor notifies new try and catch region boundaries while retaining the regions determined by existing notifications.

ASM provides mechanism for more complex cases. If you are rewriting existing bytecodes or exception regions then you can use the ASM visitor pattern to process and then renotify both line numbers and try catch boundaries as you visit the bytecode stream. Of course, the logic of how to do that can be as complex as (or more so than) the rewrite logic.

n.b. Remapping exception regions at load time is tricky for two reasons. Firstly, you cannot afford to load exception classes to investigate the exception class hierarchy without losing the opportunity to transform the exception class's bytecode. So, you have to identify exception shadowing by parsing the bytecode as a resource to establish exception super relationships. Secondly, if you tinker with or inject extra try regions you need to a) ensure they are properly nested inside containing try regions b) make sure that new  exception exit paths out of synchronized regions include monitorexits.

regards,


Andrew Dinn
-----------
Red Hat Distinguished Engineer
Red Hat UK Ltd
Registered in England and Wales under Company Registration No. 03798903
Directors: Michael Cunningham, Michael ("Mike") O'Neill

Reply via email to