Go dlv <autogenerate> 代码定位
这个问题是在通过 dlv trace rt0_go 时候出现的,情况如下
打断点 runtime.args,出现如下内容
复制代码
执行 continue,出现如下内容
复制代码
正常打断点如下:
复制代码
会到具体的调用的地方,但是 runtime.args 不会,但这不是 runtime.args 的问题,查了下 delve 的 issue,看到这篇 issue:Step into autogenerated tail calls · Issue #1908 · go-delve/delve (github.com)
觉得问题看起来是 go 编译器会对某些代码生成一些 warpper,看着是调到 runtime.args,但是实际 disassemble 之后,不是我们打断点的地方,所以需要用比较不同的方式查看到真正调用到的函数,步骤如下(重头来的):
b runtime.args
c
前两步和之前一样
disassemble
可以看到其实调 runtime.args 的地址是 0x45e184,我们需要做的就是打断点到 0x45e184
b *0x45e184
c
disassemble
si
就可以找到真正调用方法的地方
真正这个 go 编译器为什么会这么做,不太清楚,我的目的就是找到 autogenerate 后面真正调用的地方,有能解释明白 autogenerate 的朋友可以交流下
评论