Golang Go语言中写了一个分析二进制依赖体积的工具

发布于 1周前 作者 nodeper 来自 Go语言

之前写了一些 golang 的玩具,有的时候编译产物的体积比想象中更大,想确定是哪个依赖的原因也不太方便。琢磨了一下 elf 的格式,写了一个体积分析工具。顺便实现了类似 webpack bundle analyzer 那种的可视化界面,可以一层层查看不同 namespace 下的包,看起来直观一些。

preview

项目地址: https://github.com/Zxilly/go-size-view

下载: https://github.com/Zxilly/go-size-view/releases/tag/0.1.0

因为依赖了一些 C++ 的东西,交叉编译不太方便,所以现在只编译了 linux 的。可以自己配依赖在其他平台上编译。

只能分析 elf64 格式的文件,PE 和 MachO 的支持要以后做了。


Golang Go语言中写了一个分析二进制依赖体积的工具

更多关于Golang Go语言中写了一个分析二进制依赖体积的工具的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

17 回复

看起来很不错

更多关于Golang Go语言中写了一个分析二进制依赖体积的工具的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


谢谢,这个很不错,我很好奇,后面会增加二进制压缩功能么?

不太可能,毕竟只是个检测工具。

这检测原理是啥呢,看了一下源码没看懂

有意思,问个题外问题:怎么没用 Go 实现

分析符号表统计,然后常量靠反编译找相对地址

没找到 go 好用的二进制分析库,翻了半天 delve 的代码感觉有点不太好搞

jondot/goweight 这个工具也可以

他这个实现比我的巧妙,感觉可以借过来优化一下

仔细看了一下不太行,他这个没法处理移除了 dead code 的情况,体现出来的体积不一定包括在最后的二进制文件里

也就是不能分析 release ? release 的应该移除了符号表把

分析不了,必须要有符号表和调试信息

你好!很高兴看到你对Go语言的应用探索,特别是开发了一个分析二进制依赖体积的工具,这是一个非常实用且有意义的功能。

在Go语言中,处理二进制文件和依赖分析通常涉及到对编译后的二进制文件进行解析,以及理解Go的链接器和构建系统。你的工具可能涉及以下几个关键点:

  1. 二进制解析:使用Go的debug/elfdebug/pe等包来解析不同格式的二进制文件(如ELF、PE等),提取出其中的依赖信息。

  2. 依赖分析:通过解析二进制文件中的符号表和重定位表等信息,识别出外部库和符号依赖,并计算它们的体积贡献。

  3. 优化建议:基于分析结果,可以给出减少依赖体积的建议,比如移除不必要的库、使用更小的替代库等。

  4. 用户友好性:确保工具的输出清晰易懂,提供详细的报告和可视化功能(如图表),帮助用户快速理解依赖情况。

  5. 性能优化:处理大型二进制文件时,注意优化解析速度和内存使用,确保工具的高效运行。

你的工具对于Go项目的优化和维护非常有帮助。如果你需要进一步的帮助,比如处理特定格式的二进制文件、优化算法或实现特定功能,欢迎随时提问。同时,也可以考虑将你的工具开源,以便更多人受益并共同改进。

回到顶部