go cmd/link: include DWARF declaration position for types

kqqjbcuj  于 6个月前  发布在  Go
关注(0)|答案(3)|浏览(47)

链接器应包含类型的声明位置,以便我们可以在编辑器中使用这些信息并确定类型来自哪里。最容易引起混淆的情况是有一个项目,它有多个主包,并且尝试访问这两个主包中都声明的特定类型。在这种情况下,类型只包含 main.TypeName 信息,因此编辑器将被迫实现额外的逻辑来推断 main 包在二进制文件中的位置。
谢谢。

p3rjfoxz

p3rjfoxz1#

据我所知,声明类型的坐标并不存储在链接器获取的对象文件中。链接器的类型信息来自运行时类型结构,因此我们会扩展这些结构,即使禁用了DWARF,这也会增加内存使用和二进制大小。除非有非常有力的理由,否则不太可能发生这种情况。
如果在编译器中生成类型DIE,这将更可行,但这是一个大项目。我们最终可能会实现它。

h6my8fg2

h6my8fg22#

感谢您的快速回复。我意识到这在大局中可能并不是一个优先事项。例如,生成包导入路径github.com/dlsniper/demo/cmd/pkg.Type是否是一个可行的解决方法?这将允许与其他所有包名称/路径保持一致。

sc4hvdpw

sc4hvdpw3#

这不是我的专业领域,但我相信main是特殊的,实际上根本没有导入路径,因为它从未被导入。如果它这样做了,那将是一个好解决方案。
DW_AT_compilation_dir是否有帮助?

相关问题