java-callgraph2 icon indicating copy to clipboard operation
java-callgraph2 copied to clipboard

方法的起始行号和结束行号不准

Open shuaijiali opened this issue 1 year ago • 10 comments

shuaijiali avatar Feb 27 '24 03:02 shuaijiali

这是来自zhengyi的邮箱的自动回复邮件。您好,您给我发邮件时我的邮箱未打开,我无法亲自回复您的邮件。我将在进入邮箱后,尽快给您回复。

Adrninistrator avatar Feb 27 '24 03:02 Adrninistrator

可以麻烦发下代码示例和结果不

Adrninistrator avatar Feb 27 '24 03:02 Adrninistrator

com.logexample.logdemo.TestService:test2(com.logexample.logdemo.Song) line_start: 23 line_end: 35

shuaijiali avatar Feb 27 '24 03:02 shuaijiali

企业微信20240227-114927

shuaijiali avatar Feb 27 '24 03:02 shuaijiali

跑了一个服务 大多数行号都是不准的

shuaijiali avatar Feb 27 '24 03:02 shuaijiali

通过class文件能获取到的方法起止行号是第一和最后一条指令的行号,和源码的不完全一样

Adrninistrator avatar Feb 27 '24 03:02 Adrninistrator

另外我这里也遇到过一个case:就是@SneakyThrows这个标签,也会导致行号错乱。 可以复现

binghuo15955 avatar Feb 28 '24 09:02 binghuo15955

@SneakyThrows

这个lombok的注解应该是会使代码被编译时发生变化,所以编译后的行号和编译前匹配不上

Adrninistrator avatar Feb 28 '24 09:02 Adrninistrator

@SneakyThrows

这个lombok的注解应该是会使代码被编译时发生变化,所以编译后的行号和编译前匹配不上

那请问针对这种case,如何能让行号正确呢? 因为可能还会有其他类似的注解or anything else导致这个编译后行号出错。

binghuo15955 avatar Mar 01 '24 13:03 binghuo15955

@SneakyThrows

这个lombok的注解应该是会使代码被编译时发生变化,所以编译后的行号和编译前匹配不上

那请问针对这种case,如何能让行号正确呢? 因为可能还会有其他类似的注解or anything else导致这个编译后行号出错。

虽然加上@SneakyThrows注解后方法的起止行号会变化,但是相邻方法的起止行号应该是递增的,通过字节码获取的方法起止行号范围应该是大于源码中的方法起止行号

如果需要通过源码中的方法行号,和通过字节码获取的方法起止行号,来获取对应的方法,还是能获取到的

比如源码中方法1的起行号是10~20,字节码中该方法的行号是9~21,那么10~20中间的值学是满足9~21

Adrninistrator avatar Mar 01 '24 13:03 Adrninistrator