跳至内容

found bad pointer in Go heap 排查指南

2025-11-23 14:30:06

本文主要记录:fatal error: found bad pointer in Go heap (incorrect use of unsafe or cgo?) 的排查过程,并给出此类问题的排查指南。

首先,我给一个例子:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main

import (
	"log"
	"runtime"
	"unsafe"
)

func makeBadPointer() uintptr {
	tmp := make([]byte, 1e6)
	badPointer := uintptr(unsafe.Pointer(unsafe.SliceData(tmp)))
	return badPointer
}

// 故意误导,假设这个函数是正常函数,但因为内存分配触发了 gc
func misleadFunc() {
	runtime.GC()
	runtime.GC()
	runtime.GC()
}

func main() {
	badPointer := makeBadPointer()
	misleadFunc()

	tmp2 := unsafe.Pointer(badPointer)
	misleadFunc()
	if tmp2 != nil {
		log.Default().Println("test passed")
	}
}

接着我们编译为二进制文件并运行:

go build -o app && ./app

报错信息中,和 main.go 有关的是:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
runtime: pointer 0x14000100000 to unallocated span span.base()=0x14000072000 span.limit=0x1400007a000 span.state=0
runtime: found in object at *(0x140000a0f00+0x0)
object=0x140000a0f00 s.base()=0x1400009c000 s.limit=0x140000a4000 s.spanclass=0 s.elemsize=4096 s.state=mSpanManual
... // 这里省略中间的数百行 log
goroutine 1 gp=0x140000021c0 m=nil [wait for GC cycle (scan)]:
runtime.gopark(0x140000a0db8?, 0x104b85160?, 0xb8?, 0xd?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xc8 fp=0x140000a0e50 sp=0x140000a0e30 pc=0x104bd3508
runtime.goparkunlock(...)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:441
runtime.gcWaitOnMark(0x4)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:559 +0x64 fp=0x140000a0e80 sp=0x140000a0e50 pc=0x104b847e4
runtime.GC()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:503 +0x50 fp=0x140000a0ec0 sp=0x140000a0e80 pc=0x104b84640
main.misleadFunc()
        /Volumes/code/golang/example/gc-panic/main.go:17 +0x1c fp=0x140000a0ed0 sp=0x140000a0ec0 pc=0x104c0adbc
main.main()
        /Volumes/code/golang/example/gc-panic/main.go:27 +0x48 fp=0x140000a0f40 sp=0x140000a0ed0 pc=0x104c0ae28
runtime.main()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:283 +0x284 fp=0x140000a0fd0 sp=0x140000a0f40 pc=0x104ba3e44
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x140000a0fd0 sp=0x140000a0fd0 pc=0x104bd9d94

详细报错信息如下:

报错堆栈,点击展开
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
$ go build -o app && ./app
runtime: pointer 0x14000100000 to unallocated span span.base()=0x14000072000 span.limit=0x1400007a000 span.state=0
runtime: found in object at *(0x140000a0f00+0x0)
object=0x140000a0f00 s.base()=0x1400009c000 s.limit=0x140000a4000 s.spanclass=0 s.elemsize=4096 s.state=mSpanManual
 *(object+0) = 0x14000100000 <==
 *(object+8) = 0x68
 *(object+16) = 0x0
 *(object+24) = 0x140000a0f38
 *(object+32) = 0x104ba3e18
 *(object+40) = 0x104cdc5d8
 *(object+48) = 0x140000021c0
 *(object+56) = 0x0
 *(object+64) = 0x104bd9d94
 *(object+72) = 0x14000096000
 *(object+80) = 0x0
 *(object+88) = 0x0
 *(object+96) = 0x0
 *(object+104) = 0x100000000000000
 *(object+112) = 0xe
 *(object+120) = 0x3
 *(object+128) = 0x104cdd320
 *(object+136) = 0x0
 *(object+144) = 0xd
 *(object+152) = 0x104cdc980
 *(object+160) = 0x104cdc690
 *(object+168) = 0x104ce6e60
 *(object+176) = 0x104ba3fc0
 *(object+184) = 0x140000a0f6e
 *(object+192) = 0x140000a0fb0
 *(object+200) = 0x0
 *(object+208) = 0x0
 *(object+216) = 0x0
 *(object+224) = 0x0
 *(object+232) = 0x0
 *(object+240) = 0x0
 *(object+248) = 0x0
 *(object+256) = 0x140000a2000
 *(object+264) = 0x0
 *(object+272) = 0x0
 *(object+280) = 0x0
 *(object+288) = 0x0
 *(object+296) = 0x0
 *(object+304) = 0x0
 *(object+312) = 0x0
 *(object+320) = 0x0
 *(object+328) = 0x0
 *(object+336) = 0x0
 *(object+344) = 0x0
 *(object+352) = 0x0
 *(object+360) = 0x0
 *(object+368) = 0x0
 *(object+376) = 0x0
 *(object+384) = 0x0
 *(object+392) = 0x0
 *(object+400) = 0x0
 *(object+408) = 0x0
 *(object+416) = 0x0
 *(object+424) = 0x0
 *(object+432) = 0x0
 *(object+440) = 0x0
 *(object+448) = 0x0
 *(object+456) = 0x0
 *(object+464) = 0x0
 *(object+472) = 0x0
 *(object+480) = 0x0
 *(object+488) = 0x0
 *(object+496) = 0x0
 *(object+504) = 0x0
 *(object+512) = 0x0
 *(object+520) = 0x0
 *(object+528) = 0x0
 *(object+536) = 0x0
 *(object+544) = 0x0
 *(object+552) = 0x0
 *(object+560) = 0x0
 *(object+568) = 0x0
 *(object+576) = 0x0
 *(object+584) = 0x0
 *(object+592) = 0x0
 *(object+600) = 0x0
 *(object+608) = 0x0
 *(object+616) = 0x0
 *(object+624) = 0x0
 *(object+632) = 0x0
 *(object+640) = 0x0
 *(object+648) = 0x0
 *(object+656) = 0x0
 *(object+664) = 0x0
 *(object+672) = 0x0
 *(object+680) = 0x0
 *(object+688) = 0x0
 *(object+696) = 0x0
 *(object+704) = 0x0
 *(object+712) = 0x0
 *(object+720) = 0x0
 *(object+728) = 0x0
 *(object+736) = 0x0
 *(object+744) = 0x0
 *(object+752) = 0x0
 *(object+760) = 0x0
 *(object+768) = 0x0
 *(object+776) = 0x0
 *(object+784) = 0x0
 *(object+792) = 0x0
 *(object+800) = 0x0
 *(object+808) = 0x0
 *(object+816) = 0x0
 *(object+824) = 0x0
 *(object+832) = 0x0
 *(object+840) = 0x0
 *(object+848) = 0x0
 *(object+856) = 0x0
 *(object+864) = 0x0
 *(object+872) = 0x0
 *(object+880) = 0x0
 *(object+888) = 0x0
 *(object+896) = 0x0
 *(object+904) = 0x0
 *(object+912) = 0x0
 *(object+920) = 0x0
 *(object+928) = 0x0
 *(object+936) = 0x0
 *(object+944) = 0x0
 *(object+952) = 0x0
 *(object+960) = 0x0
 *(object+968) = 0x0
 *(object+976) = 0x0
 *(object+984) = 0x0
 *(object+992) = 0x0
 *(object+1000) = 0x0
 *(object+1008) = 0x0
 *(object+1016) = 0x0
 ...
fatal error: found bad pointer in Go heap (incorrect use of unsafe or cgo?)

runtime stack:
runtime.throw({0x104c13dab?, 0x6?})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/panic.go:1101 +0x38 fp=0x16b432ab0 sp=0x16b432a80 pc=0x104bd3428
runtime.badPointer(0x12b8c8dc8, 0x14000100000, 0x140000a0f00, 0x0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mbitmap.go:1294 +0x128 fp=0x16b432b00 sp=0x16b432ab0 pc=0x104b7f818
runtime.findObject(0x140000a0f38?, 0x104cd93e8?, 0x104cdd320?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mbitmap.go:1346 +0xac fp=0x16b432b40 sp=0x16b432b00 pc=0x104bd245c
runtime.scanblock(0x140000a0f00, 0x38, 0x104c14e1d, 0x14000031250, 0x16b432ca0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgcmark.go:1362 +0xac fp=0x16b432ba0 sp=0x16b432b40 pc=0x104b8b2ec
runtime.scanframeworker(0x16b432c40, 0x16b432ca0, 0x14000031250)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgcmark.go:1055 +0xb0 fp=0x16b432c00 sp=0x16b432ba0 pc=0x104b8a9d0
runtime.scanstack(0x140000021c0, 0x14000031250)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgcmark.go:905 +0x284 fp=0x16b432d20 sp=0x16b432c00 pc=0x104b8a5a4
runtime.markroot.func1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgcmark.go:240 +0xa8 fp=0x16b432d70 sp=0x16b432d20 pc=0x104b88ed8
runtime.markroot(0x14000031250, 0x14, 0x1)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgcmark.go:214 +0x1c0 fp=0x16b432e20 sp=0x16b432d70 pc=0x104b88bb0
runtime.gcDrain(0x14000031250, 0x3)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgcmark.go:1186 +0x434 fp=0x16b432e90 sp=0x16b432e20 pc=0x104b8af74
runtime.gcDrainMarkWorkerDedicated(...)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgcmark.go:1110
runtime.gcBgMarkWorker.func2()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1501 +0x94 fp=0x16b432ee0 sp=0x16b432e90 pc=0x104b86e24
runtime.systemstack(0x80000)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:244 +0x6c fp=0x16b432ef0 sp=0x16b432ee0 pc=0x104bd7a1c

goroutine 27 gp=0x14000083500 m=3 mp=0x14000057008 [GC worker (active)]:
runtime.systemstack_switch()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:201 +0x8 fp=0x1400009df10 sp=0x1400009df00 pc=0x104bd7998
runtime.gcBgMarkWorker(0x14000096070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1483 +0x200 fp=0x1400009dfb0 sp=0x1400009df10 pc=0x104b86ac0
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x1400009dfd0 sp=0x1400009dfb0 pc=0x104b86888
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400009dfd0 sp=0x1400009dfd0 pc=0x104bd9d94
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x140

goroutine 1 gp=0x140000021c0 m=nil [wait for GC cycle (scan)]:
runtime.gopark(0x140000a0db8?, 0x104b85160?, 0xb8?, 0xd?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xc8 fp=0x140000a0e50 sp=0x140000a0e30 pc=0x104bd3508
runtime.goparkunlock(...)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:441
runtime.gcWaitOnMark(0x4)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:559 +0x64 fp=0x140000a0e80 sp=0x140000a0e50 pc=0x104b847e4
runtime.GC()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:503 +0x50 fp=0x140000a0ec0 sp=0x140000a0e80 pc=0x104b84640
main.misleadFunc()
        /Volumes/code/golang/example/gc-panic/main.go:17 +0x1c fp=0x140000a0ed0 sp=0x140000a0ec0 pc=0x104c0adbc
main.main()
        /Volumes/code/golang/example/gc-panic/main.go:27 +0x48 fp=0x140000a0f40 sp=0x140000a0ed0 pc=0x104c0ae28
runtime.main()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:283 +0x284 fp=0x140000a0fd0 sp=0x140000a0f40 pc=0x104ba3e44
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x140000a0fd0 sp=0x140000a0fd0 pc=0x104bd9d94

goroutine 2 gp=0x14000002700 m=nil [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xc8 fp=0x14000050f90 sp=0x14000050f70 pc=0x104bd3508
runtime.goparkunlock(...)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:441
runtime.forcegchelper()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:348 +0xb8 fp=0x14000050fd0 sp=0x14000050f90 pc=0x104ba4198
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x14000050fd0 sp=0x14000050fd0 pc=0x104bd9d94
created by runtime.init.7 in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:336 +0x24

goroutine 17 gp=0x14000082380 m=nil [GC sweep wait]:
runtime.gopark(0x1?, 0x0?, 0x0?, 0x0?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xc8 fp=0x1400004c760 sp=0x1400004c740 pc=0x104bd3508
runtime.goparkunlock(...)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:441
runtime.bgsweep(0x1400008e000)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgcsweep.go:316 +0x108 fp=0x1400004c7b0 sp=0x1400004c760 pc=0x104b90678
runtime.gcenable.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:204 +0x28 fp=0x1400004c7d0 sp=0x1400004c7b0 pc=0x104b84508
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400004c7d0 sp=0x1400004c7d0 pc=0x104bd9d94
created by runtime.gcenable in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:204 +0x6c

goroutine 18 gp=0x14000082540 m=nil [GC scavenge wait]:
runtime.gopark(0x2d737?, 0x6553f100?, 0x0?, 0x0?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xc8 fp=0x1400004cf60 sp=0x1400004cf40 pc=0x104bd3508
runtime.goparkunlock(...)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:441
runtime.(*scavengerState).park(0x104ce66c0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgcscavenge.go:425 +0x5c fp=0x1400004cf90 sp=0x1400004cf60 pc=0x104b8e11c
runtime.bgscavenge(0x1400008e000)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgcscavenge.go:658 +0xac fp=0x1400004cfb0 sp=0x1400004cf90 pc=0x104b8e6bc
runtime.gcenable.gowrap2()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:205 +0x28 fp=0x1400004cfd0 sp=0x1400004cfb0 pc=0x104b844a8
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400004cfd0 sp=0x1400004cfd0 pc=0x104bd9d94
created by runtime.gcenable in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:205 +0xac

goroutine 19 gp=0x14000082700 m=nil [finalizer wait]:
runtime.gopark(0x140000505b8?, 0x104bd3f84?, 0x1?, 0x5?, 0x104bdd3f4?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xc8 fp=0x14000050590 sp=0x14000050570 pc=0x104bd3508
runtime.runfinq()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mfinal.go:196 +0x108 fp=0x140000507d0 sp=0x14000050590 pc=0x104b83508
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x140000507d0 sp=0x140000507d0 pc=0x104bd9d94
created by runtime.createfing in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mfinal.go:166 +0x80

goroutine 20 gp=0x140000828c0 m=nil [GC worker (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xc8 fp=0x1400004d710 sp=0x1400004d6f0 pc=0x104bd3508
runtime.gcBgMarkWorker(0x14000096070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xdc fp=0x1400004d7b0 sp=0x1400004d710 pc=0x104b8699c
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x1400004d7d0 sp=0x1400004d7b0 pc=0x104b86888
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400004d7d0 sp=0x1400004d7d0 pc=0x104bd9d94
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x140

goroutine 21 gp=0x14000082a80 m=nil [GC worker (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xc8 fp=0x1400004df10 sp=0x1400004def0 pc=0x104bd3508
runtime.gcBgMarkWorker(0x14000096070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xdc fp=0x1400004dfb0 sp=0x1400004df10 pc=0x104b8699c
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x1400004dfd0 sp=0x1400004dfb0 pc=0x104b86888
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400004dfd0 sp=0x1400004dfd0 pc=0x104bd9d94
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x140

goroutine 22 gp=0x14000082c40 m=nil [GC worker (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xc8 fp=0x1400004e710 sp=0x1400004e6f0 pc=0x104bd3508
runtime.gcBgMarkWorker(0x14000096070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xdc fp=0x1400004e7b0 sp=0x1400004e710 pc=0x104b8699c
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x1400004e7d0 sp=0x1400004e7b0 pc=0x104b86888
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400004e7d0 sp=0x1400004e7d0 pc=0x104bd9d94
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x140

goroutine 23 gp=0x14000082e00 m=nil [GC worker (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xc8 fp=0x1400004ef10 sp=0x1400004eef0 pc=0x104bd3508
runtime.gcBgMarkWorker(0x14000096070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xdc fp=0x1400004efb0 sp=0x1400004ef10 pc=0x104b8699c
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x1400004efd0 sp=0x1400004efb0 pc=0x104b86888
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400004efd0 sp=0x1400004efd0 pc=0x104bd9d94
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x140

goroutine 24 gp=0x14000082fc0 m=nil [GC worker (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xc8 fp=0x1400004f710 sp=0x1400004f6f0 pc=0x104bd3508
runtime.gcBgMarkWorker(0x14000096070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xdc fp=0x1400004f7b0 sp=0x1400004f710 pc=0x104b8699c
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x1400004f7d0 sp=0x1400004f7b0 pc=0x104b86888
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400004f7d0 sp=0x1400004f7d0 pc=0x104bd9d94
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x140

goroutine 25 gp=0x14000083180 m=nil [GC worker (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xc8 fp=0x1400004ff10 sp=0x1400004fef0 pc=0x104bd3508
runtime.gcBgMarkWorker(0x14000096070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xdc fp=0x1400004ffb0 sp=0x1400004ff10 pc=0x104b8699c
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x1400004ffd0 sp=0x1400004ffb0 pc=0x104b86888
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400004ffd0 sp=0x1400004ffd0 pc=0x104bd9d94
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x140

goroutine 26 gp=0x14000083340 m=nil [GC worker (idle)]:
runtime.gopark(0x4300c093455?, 0x0?, 0x0?, 0x0?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xc8 fp=0x140000c4710 sp=0x140000c46f0 pc=0x104bd3508
runtime.gcBgMarkWorker(0x14000096070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xdc fp=0x140000c47b0 sp=0x140000c4710 pc=0x104b8699c
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x140000c47d0 sp=0x140000c47b0 pc=0x104b86888
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x140000c47d0 sp=0x140000c47d0 pc=0x104bd9d94
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x140

goroutine 28 gp=0x140000836c0 m=nil [GC worker (idle)]:
runtime.gopark(0x4300c08ec8e?, 0x3?, 0x95?, 0x3?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xc8 fp=0x1400009ef10 sp=0x1400009eef0 pc=0x104bd3508
runtime.gcBgMarkWorker(0x14000096070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xdc fp=0x1400009efb0 sp=0x1400009ef10 pc=0x104b8699c
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x1400009efd0 sp=0x1400009efb0 pc=0x104b86888
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400009efd0 sp=0x1400009efd0 pc=0x104bd9d94
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x140

goroutine 29 gp=0x14000083880 m=nil [GC worker (idle)]:
runtime.gopark(0x4300c0414f8?, 0x0?, 0x0?, 0x0?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xc8 fp=0x140000a1f10 sp=0x140000a1ef0 pc=0x104bd3508
runtime.gcBgMarkWorker(0x14000096070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xdc fp=0x140000a1fb0 sp=0x140000a1f10 pc=0x104b8699c
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x140000a1fd0 sp=0x140000a1fb0 pc=0x104b86888
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x140000a1fd0 sp=0x140000a1fd0 pc=0x104bd9d94
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x140

这里 main.go:17 对应的是 misleadFunc 里第一个 runtime.GC() 而出错的其实是第 26 行,第 27 行调用了 misleadFunc 函数而已,可见出错时并没有立即 panic,而是在 GC 运行时,检测到错误才打印堆栈并 panic,且打印的堆栈是 GC 触发时的堆栈,和真正的命案现场毫不相关,这也是该问题的难查之处:出错在 GC 阶段,堆栈是 Golang 内部的堆栈,而之所以这样是因为 go build 构建出来的二进制是优化过的,对于内存问题,他不是实时检测而是在 gc 运行时检测,想要解决该问题,就必须开启内存问题的实时检测:

go build -gcflags="all=-N -l -d=checkptr=2" -o app && ./app

此时,报错信息中,和 main.go 有关的是:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
runtime: pointer 0x14000180000 to unallocated span span.base()=0x14000180000 span.limit=0x14000274240 span.state=0
fatal error: found bad pointer in Go heap (incorrect use of unsafe or cgo?)

goroutine 1 gp=0x140000021c0 m=3 mp=0x14000057008 [running]:
runtime.throw({0x104213832?, 0x10415e76c?})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/panic.go:1101 +0x38 fp=0x14000104de0 sp=0x14000104db0 pc=0x1041b47e8
runtime.badPointer(0x14aed77a8, 0x14000180000, 0x0, 0x0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mbitmap.go:1294 +0x84 fp=0x14000104e30 sp=0x14000104de0 pc=0x104162124
runtime.findObject(0x14000180000, 0x0, 0x0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mbitmap.go:1346 +0x104 fp=0x14000104e80 sp=0x14000104e30 pc=0x1041b3b24
runtime.checkptrBase(0x14000180000)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/checkptr.go:104 +0x58 fp=0x14000104eb0 sp=0x14000104e80 pc=0x1041b2e28
runtime.checkptrArithmetic(0x14000102060?, {0x0, 0x0, 0x104158204?})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/checkptr.go:58 +0x38 fp=0x14000104ee0 sp=0x14000104eb0 pc=0x104158ee8
main.main()
        /Volumes/code/golang/example/gc-panic/main.go:26 +0x3c fp=0x14000104f60 sp=0x14000104ee0 pc=0x10420a38c
runtime.main()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:283 +0x224 fp=0x14000104fd0 sp=0x14000104f60 pc=0x1041870b4
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x14000104fd0 sp=0x14000104fd0 pc=0x1041babf4
... // 这里省略余下的其他 log

详细的错误信息如下:

报错堆栈,点击展开
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
$ go build -gcflags="all=-N -l -d=checkptr=2" -o app && ./app
runtime: pointer 0x14000180000 to unallocated span span.base()=0x14000180000 span.limit=0x14000274240 span.state=0
fatal error: found bad pointer in Go heap (incorrect use of unsafe or cgo?)

goroutine 1 gp=0x140000021c0 m=3 mp=0x14000057008 [running]:
runtime.throw({0x104213832?, 0x10415e76c?})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/panic.go:1101 +0x38 fp=0x14000104de0 sp=0x14000104db0 pc=0x1041b47e8
runtime.badPointer(0x14aed77a8, 0x14000180000, 0x0, 0x0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mbitmap.go:1294 +0x84 fp=0x14000104e30 sp=0x14000104de0 pc=0x104162124
runtime.findObject(0x14000180000, 0x0, 0x0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mbitmap.go:1346 +0x104 fp=0x14000104e80 sp=0x14000104e30 pc=0x1041b3b24
runtime.checkptrBase(0x14000180000)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/checkptr.go:104 +0x58 fp=0x14000104eb0 sp=0x14000104e80 pc=0x1041b2e28
runtime.checkptrArithmetic(0x14000102060?, {0x0, 0x0, 0x104158204?})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/checkptr.go:58 +0x38 fp=0x14000104ee0 sp=0x14000104eb0 pc=0x104158ee8
main.main()
        /Volumes/code/golang/example/gc-panic/main.go:26 +0x3c fp=0x14000104f60 sp=0x14000104ee0 pc=0x10420a38c
runtime.main()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:283 +0x224 fp=0x14000104fd0 sp=0x14000104f60 pc=0x1041870b4
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x14000104fd0 sp=0x14000104fd0 pc=0x1041babf4

goroutine 17 gp=0x14000082380 m=nil [force gc (idle)]:
runtime.gopark(0x104244e38, 0x1042d6490, 0x11, 0xa, 0x1)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xdc fp=0x1400004c770 sp=0x1400004c740 pc=0x1041b48dc
runtime.goparkunlock(0x1042d6490?, 0x0?, 0x0?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:441 +0x34 fp=0x1400004c7a0 sp=0x1400004c770 pc=0x104187544
runtime.forcegchelper()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:348 +0xb4 fp=0x1400004c7d0 sp=0x1400004c7a0 pc=0x104187414
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400004c7d0 sp=0x1400004c7d0 pc=0x1041babf4
created by runtime.init.7 in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:336 +0x24

goroutine 18 gp=0x14000082540 m=nil [GC sweep wait]:
runtime.gopark(0x104244e38, 0x1042d6680, 0xc, 0x9, 0x1)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xdc fp=0x1400004cf40 sp=0x1400004cf10 pc=0x1041b48dc
runtime.goparkunlock(0x1042d6680?, 0x0?, 0x0?, 0x0?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:441 +0x34 fp=0x1400004cf70 sp=0x1400004cf40 pc=0x104187544
runtime.bgsweep(0x14000090000)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgcsweep.go:316 +0xdc fp=0x1400004cfb0 sp=0x1400004cf70 pc=0x104172b3c
runtime.gcenable.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:204 +0x28 fp=0x1400004cfd0 sp=0x1400004cfb0 pc=0x104167408
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400004cfd0 sp=0x1400004cfd0 pc=0x1041babf4
created by runtime.gcenable in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:204 +0x6c

goroutine 19 gp=0x14000082700 m=nil [sleep]:
runtime.gopark(0x104244e38, 0x1042d6820, 0x13, 0xe, 0x2)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xdc fp=0x14000107ef0 sp=0x14000107ec0 pc=0x1041b48dc
runtime.goparkunlock(0x1042d6820?, 0x5a?, 0x6?, 0x8000?)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:441 +0x34 fp=0x14000107f20 sp=0x14000107ef0 pc=0x104187544
runtime.(*scavengerState).sleep(0x1042d6820, 0x40a7700000000000)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgcscavenge.go:504 +0xe8 fp=0x14000107f80 sp=0x14000107f20 pc=0x104170488
runtime.bgscavenge(0x14000090000)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgcscavenge.go:662 +0x88 fp=0x14000107fb0 sp=0x14000107f80 pc=0x104170808
runtime.gcenable.gowrap2()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:205 +0x28 fp=0x14000107fd0 sp=0x14000107fb0 pc=0x1041673a8
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x14000107fd0 sp=0x14000107fd0 pc=0x1041babf4
created by runtime.gcenable in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:205 +0xac

goroutine 33 gp=0x1400011c000 m=nil [finalizer wait]:
runtime.gopark(0x104244ba8, 0x1042fc750, 0x10, 0xa, 0x1)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xdc fp=0x14000050590 sp=0x14000050560 pc=0x1041b48dc
runtime.runfinq()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mfinal.go:196 +0xf0 fp=0x140000507d0 sp=0x14000050590 pc=0x1041664f0
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x140000507d0 sp=0x140000507d0 pc=0x1041babf4
created by runtime.createfing in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mfinal.go:166 +0x4c

goroutine 34 gp=0x1400011c1c0 m=nil [GC worker (idle)]:
runtime.gopark(0x104244bc0, 0x1400013e000, 0x1b, 0xa, 0x0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xdc fp=0x1400013a700 sp=0x1400013a6d0 pc=0x1041b48dc
runtime.gcBgMarkWorker(0x14000102070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xd8 fp=0x1400013a7b0 sp=0x1400013a700 pc=0x1041690b8
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x1400013a7d0 sp=0x1400013a7b0 pc=0x104168f88
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400013a7d0 sp=0x1400013a7d0 pc=0x1041babf4
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x6c

goroutine 35 gp=0x1400011c380 m=nil [GC worker (idle)]:
runtime.gopark(0x104244bc0, 0x1400013e020, 0x1b, 0xa, 0x0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xdc fp=0x1400013af00 sp=0x1400013aed0 pc=0x1041b48dc
runtime.gcBgMarkWorker(0x14000102070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xd8 fp=0x1400013afb0 sp=0x1400013af00 pc=0x1041690b8
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x1400013afd0 sp=0x1400013afb0 pc=0x104168f88
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400013afd0 sp=0x1400013afd0 pc=0x1041babf4
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x6c

goroutine 36 gp=0x1400011c540 m=nil [GC worker (idle)]:
runtime.gopark(0x104244bc0, 0x1400013e040, 0x1b, 0xa, 0x0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xdc fp=0x1400013b700 sp=0x1400013b6d0 pc=0x1041b48dc
runtime.gcBgMarkWorker(0x14000102070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xd8 fp=0x1400013b7b0 sp=0x1400013b700 pc=0x1041690b8
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x1400013b7d0 sp=0x1400013b7b0 pc=0x104168f88
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400013b7d0 sp=0x1400013b7d0 pc=0x1041babf4
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x6c

goroutine 37 gp=0x1400011c700 m=nil [GC worker (idle)]:
runtime.gopark(0x104244bc0, 0x1400013e060, 0x1b, 0xa, 0x0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xdc fp=0x1400013bf00 sp=0x1400013bed0 pc=0x1041b48dc
runtime.gcBgMarkWorker(0x14000102070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xd8 fp=0x1400013bfb0 sp=0x1400013bf00 pc=0x1041690b8
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x1400013bfd0 sp=0x1400013bfb0 pc=0x104168f88
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400013bfd0 sp=0x1400013bfd0 pc=0x1041babf4
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x6c

goroutine 38 gp=0x1400011c8c0 m=nil [GC worker (idle)]:
runtime.gopark(0x104244bc0, 0x1400013e080, 0x1b, 0xa, 0x0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xdc fp=0x1400013c700 sp=0x1400013c6d0 pc=0x1041b48dc
runtime.gcBgMarkWorker(0x14000102070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xd8 fp=0x1400013c7b0 sp=0x1400013c700 pc=0x1041690b8
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x1400013c7d0 sp=0x1400013c7b0 pc=0x104168f88
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400013c7d0 sp=0x1400013c7d0 pc=0x1041babf4
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x6c

goroutine 39 gp=0x1400011ca80 m=nil [GC worker (idle)]:
runtime.gopark(0x104244bc0, 0x1400013e0a0, 0x1b, 0xa, 0x0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xdc fp=0x1400013cf00 sp=0x1400013ced0 pc=0x1041b48dc
runtime.gcBgMarkWorker(0x14000102070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xd8 fp=0x1400013cfb0 sp=0x1400013cf00 pc=0x1041690b8
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x1400013cfd0 sp=0x1400013cfb0 pc=0x104168f88
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400013cfd0 sp=0x1400013cfd0 pc=0x1041babf4
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x6c

goroutine 40 gp=0x1400011cc40 m=nil [GC worker (idle)]:
runtime.gopark(0x104244bc0, 0x1400013e0c0, 0x1b, 0xa, 0x0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xdc fp=0x140000abf00 sp=0x140000abed0 pc=0x1041b48dc
runtime.gcBgMarkWorker(0x14000102070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xd8 fp=0x140000abfb0 sp=0x140000abf00 pc=0x1041690b8
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x140000abfd0 sp=0x140000abfb0 pc=0x104168f88
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x140000abfd0 sp=0x140000abfd0 pc=0x1041babf4
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x6c

goroutine 41 gp=0x1400011ce00 m=nil [GC worker (idle)]:
runtime.gopark(0x104244bc0, 0x1400013e0e0, 0x1b, 0xa, 0x0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xdc fp=0x1400013df00 sp=0x1400013ded0 pc=0x1041b48dc
runtime.gcBgMarkWorker(0x14000102070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xd8 fp=0x1400013dfb0 sp=0x1400013df00 pc=0x1041690b8
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x1400013dfd0 sp=0x1400013dfb0 pc=0x104168f88
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400013dfd0 sp=0x1400013dfd0 pc=0x1041babf4
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x6c

goroutine 42 gp=0x1400011cfc0 m=nil [GC worker (idle)]:
runtime.gopark(0x104244bc0, 0x1400013e100, 0x1b, 0xa, 0x0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xdc fp=0x14000108f00 sp=0x14000108ed0 pc=0x1041b48dc
runtime.gcBgMarkWorker(0x14000102070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xd8 fp=0x14000108fb0 sp=0x14000108f00 pc=0x1041690b8
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x14000108fd0 sp=0x14000108fb0 pc=0x104168f88
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x14000108fd0 sp=0x14000108fd0 pc=0x1041babf4
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x6c

goroutine 43 gp=0x1400011d180 m=nil [GC worker (idle)]:
runtime.gopark(0x104244bc0, 0x1400013e120, 0x1b, 0xa, 0x0)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go:435 +0xdc fp=0x14000105f00 sp=0x14000105ed0 pc=0x1041b48dc
runtime.gcBgMarkWorker(0x14000102070)
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1423 +0xd8 fp=0x14000105fb0 sp=0x14000105f00 pc=0x1041690b8
runtime.gcBgMarkStartWorkers.gowrap1()
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x28 fp=0x14000105fd0 sp=0x14000105fb0 pc=0x104168f88
runtime.goexit({})
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x14000105fd0 sp=0x14000105fd0 pc=0x1041babf4
created by runtime.gcBgMarkStartWorkers in goroutine 1
        /Volumes/data/develop/gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/mgc.go:1339 +0x6c

根据这个错误信息,我们可以非常清楚的看到,问题出在 main.go 的第 26 行,在生产环境,更推荐的写法是:

go build -v -gcflags="github.com/...=-N -l -d=checkptr=2" -gcflags="$(go list -m)/...=-N -l -d=checkptr=2"

github.com/… 表示对以 github.com 开头的包应用该规则,如果没有 /… 则仅对 github.com 这一个包应用该规则,这是一个很容易踩坑的地方。

最后更新于