
去掉 -w -s 后panic 堆栈信息会完整很多跟踪起来更容易。对比效果带 -w -s去掉符号表的 panicpanic: runtime error: index out of range [5] with length 3goroutine 1 [running]:main.main.func1.2autogenerated:1 0x25main.main.func1autogenerated:1 0x45main.mainautogenerated:1 0x85去掉 -w -s保留符号表的 panicpanic: runtime error: index out of range [5] with length 3goroutine 1 [running]:github.com/leijmdas/godi.(*Container).resolveDependency(0xc0000a2000, {0x1234567, 0x89abcde})/home/user/project/godi/container.go:142 0x2a5github.com/leijmdas/godi.(*Container).Inject(0xc0000a2000, {0x7654321, 0x1fedcba})/home/user/project/godi/container.go:89 0x145main.main()/home/user/project/cmd/server/main.go:34 0x85关键差异信息 带 -w -s 去掉后包路径 ❌ 缺失或 autogenerated ✅ github.com/leijmdas/godi函数名 ❌ 可能被截断/混淆 ✅ (*Container).resolveDependency文件名 ❌ 无或 autogenerated ✅ container.go行号 ❌ 无 ✅ :142可 pprof 分析 ❌ 否 ✅ 是实际建议# 开发/测试/预发环境一定保留go build -o myapp main.go# 生产环境推荐保留除非体积是硬约束go build -o myapp main.go# 只有对体积极度敏感时才去掉go build -ldflags-w -s -o myapp main.go补充即使去掉 -w -s也可用 objdump 救急如果二进制已经去掉了符号表但线上出了 panic可以# 用相同源码重新编译一个带符号的版本go build -gcflagsall-N -l -o myapp.debug main.go# 用 addr2line 或 go 工具映射地址到源码go tool addr2line myapp.debug 0x2a5结论对于你的 Go 全家桶项目godi、goconfig 等建议生产环境也保留符号表panic 排查效率高很多现代服务器不差那几 MB。