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

2023-03-14 22:07:54 +08:00
 learningman

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

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

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

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

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

2359 次点击
所在节点    Go 编程语言
16 条回复
Nazz
2023-03-14 22:15:06 +08:00
看起来很不错
xujinkai
2023-03-14 22:32:18 +08:00
FightPig
2023-03-15 00:39:10 +08:00
这个不错
ewBuyVmLZMZE
2023-03-15 01:59:36 +08:00
谢谢,这个很不错,我很好奇,后面会增加二进制压缩功能么?
wuzhewuyou
2023-03-15 06:53:34 +08:00
upx 压一下
mogging
2023-03-15 08:15:58 +08:00
很实用
learningman
2023-03-15 08:27:22 +08:00
@syhily 不太可能,毕竟只是个检测工具。
proxytoworld
2023-03-15 10:39:47 +08:00
这检测原理是啥呢,看了一下源码没看懂
bv
2023-03-15 11:05:31 +08:00
有意思,问个题外问题:怎么没用 Go 实现
learningman
2023-03-15 11:24:10 +08:00
@proxytoworld 分析符号表统计,然后常量靠反编译找相对地址
learningman
2023-03-15 11:25:19 +08:00
@bv 没找到 go 好用的二进制分析库,翻了半天 delve 的代码感觉有点不太好搞
MyLeoWind
2023-03-15 11:45:43 +08:00
jondot/goweight 这个工具也可以
learningman
2023-03-15 12:11:13 +08:00
@MyLeoWind 他这个实现比我的巧妙,感觉可以借过来优化一下
learningman
2023-03-15 12:19:16 +08:00
@MyLeoWind 仔细看了一下不太行,他这个没法处理移除了 dead code 的情况,体现出来的体积不一定包括在最后的二进制文件里
proxytoworld
2023-03-15 16:16:27 +08:00
@learningman 也就是不能分析 release ? release 的应该移除了符号表把
learningman
2023-03-15 16:46:31 +08:00
@proxytoworld 分析不了,必须要有符号表和调试信息

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/924018

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX