共计 1500 个字符,预计需要花费 4 分钟才能阅读完成。
环境阐明
macOs bigSur 11.4
GNU gdb (GDB) 10.2
代码筹备
package main
type Ner interface {a()
b(int)
c(string) string
}
type N int
func (N) a() {}
func (*N) b(i int) {return}
func (*N) c(s string) string {return "c"}
func main() {
var n N
var t Ner = &n
t.a()}
命令执行
go build -gcflags “-N -l” -ldflags=-compressdwarf=false main.go
gdb main
失常输入图
- 设置断点(在第 25 行),而后执行
(gdb) b main.go:25
Loading Go Runtime support.
(gdb) b main.go:25
Breakpoint 1 at 0x1054d98: file /Users/didi/GolandProjects/goLarnNote/Chapter7/Iface/debugGDB/main.go, line 25.
(gdb) run
Starting program: /Users/didi/GolandProjects/goLarnNote/Chapter7/Iface/debugGDB/main
[New Thread 0x2603 of process 72590]
[New Thread 0x1a03 of process 72590]
warning: unhandled dyld version (17)
[New Thread 0x2403 of process 72590]
[New Thread 0x2507 of process 72590]
[New Thread 0x2203 of process 72590]
Thread 2 hit Breakpoint 1, main.main () at /Users/didi/GolandProjects/goLarnNote/Chapter7/Iface/debugGDB/main.go:25
25 t.a()
- 查看信息并打印
(gdb) info locals
t = {tab = 0x1076b60 <N,main.Ner>, data = 0xc00003c748}
n = 0
(gdb) p *t.tab
$1 = {inter = 0x105b800 <type.*+26912>, _type = 0x105b580 <type.*+26272>, hash = 3289684567, _ = "\000\000\000",
fun = {16812096}}
(gdb) p *t.tab_type
There is no member named tab_type.
(gdb) p *t.tab.inter
$2 = {typ = {size = 16, ptrdata = 16, hash = 1801897693, tflag = 7 '\a', align = 8 '\b', fieldAlign = 8 '\b',
kind = 20 '\024', equal = {void (void *, void *, bool *)} 0x105b818 <type.*+26936>,
gcdata = 0x1065b18 <func.*+254> "\002", str = 2790, ptrToThis = 9664}, pkgpath = {bytes = 0x105500a <type.*+298> ""}, mhdr = []runtime.imethod = {{name = 8, ityp = 15552}, {name = 11,
ityp = 16128}, {name = 14, ityp = 20288}}}
后续 todo
联合 iface,eface 的构造来分析接口判等 等系列问题
参考资料
gdb-debugger-with-go
正文完