рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд gc
рдЙрдкрдХрд░рдг рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред Gccgo рдиреЗ gdb рд╕рдорд░реНрдерди рдмрдирд╛рдпрд╛ рд╣реИред рдЗрд╕ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк GDB рдореИрдиреБрдЕрд▓ рд╕реЗ рдкрд░рд╛рдорд░реНрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдЬрдм рдЖрдк рд▓рд┐рдирдХреНрд╕, рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдпрд╛ рдлреНрд░реАрдмреАрдПрд╕рдбреА рдкрд░ рдЬреАрд╕реА рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЧреЛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдореА рдмрд╛рдпрдиреЗрд░реАрдЬрд╝ рдореЗрдВ DWARFv3 рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬреЛ рдирд╡реАрдирддрдо GDB рдбрд┐рдмрдЧрд░ (> 7.1) рд▓рд╛рдЗрд╡ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╛ рдбрдВрдк рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИред
рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХрд░ рдХреЛ
'-s'
рдлреНрд▓реИрдЧ рдкрд╛рд╕ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
go build -ldflags "-s" prog.go
)ред
рдЬреАрд╕реА рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдФрд░ рдЪрд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпреЗ рдЕрдиреБрдХреВрд▓рди рдХрднреА-рдХрднреА GDB рдХреЗ рд╕рд╛рде рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдХрдард┐рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЙрдиреНрд╣реЗрдВ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
go
рдХрдорд╛рдВрдб рдореЗрдВ
-gcflags "-N -l"
рдзреНрд╡рдЬ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреАрдмрдЧ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдо рд╕рдВрдЪрд╛рд▓рди
- рдХреЛрдб рдХреА рдлрд╝рд╛рдЗрд▓ рдФрд░ рд▓рд╛рдЗрди рдирдВрдмрд░ рджрд┐рдЦрд╛рдПрдВ, рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдбрд┐рд╕рдПрдореНрдмрд▓реЗ рдХрд░реЗрдВ:
(gdb) list (gdb) list line (gdb) list file.go:line (gdb) break line (gdb) break file.go:line (gdb) disas
- рдЯреНрд░реЗрд╕ рдФрд░ рдЕрд╡рд╛рдВрдЫрд┐рдд рд╕реНрдЯреИрдХ рдлрд╝реНрд░реЗрдо рджрд┐рдЦрд╛рдПрдВ:
(gdb) bt (gdb) frame n
- рд╕реНрдерд╛рдиреАрдп рдЪрд░, рддрд░реНрдХ рдФрд░ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдкрд░ рдирд╛рдо, рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕реНрдерд╛рди рджрд┐рдЦрд╛рдПрдВ:
(gdb) info locals (gdb) info args (gdb) p variable (gdb) whatis variable
- рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХрд╛ рдирд╛рдо, рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕реНрдерд╛рди рджрд┐рдЦрд╛рдПрдВ:
(gdb) info variables regexp
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬрд╛рдУ
рдирдпрд╛ GDB рдПрдХреНрд╕рдЯреЗрдВрд╢рди рддрдВрддреНрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЯреВрд▓рдХрд┐рдЯ рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреАрдбреАрдмреА рдХреЛ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЖрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб (рдЬреИрд╕реЗ рдЧреЛрд░рдЖрдЙрдЯреНрд╕) рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╢рдмреНрджрдХреЛрд╢реЛрдВ, рд╕реНрд▓рд╛рдЗрд╕ рдФрд░ рдЪреИрдирд▓реЛрдВ рдХреЛ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдпрд╛ рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреА рд╣реИ, рддреЛ рдЧреЛ рд╕реНрд░реЛрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ
src / pkg / runtime / runtime-gdb.py рджреЗрдЦреЗрдВред рдпрд╣ рдХрдИ рд╡рд┐рд╢реЗрд╖ рдЬрд╛рджреВ рдкреНрд░рдХрд╛рд░реЛрдВ (
hash<T,U>
) рдФрд░ рдЪрд░ (
runtime.m
рдФрд░
runtime.g
) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╡рд┐рд╡рд░рдг DWARF рдХреЛрдб рдореЗрдВ рд▓рд┐рдВрдХрд░ (
src / cmd / ld / dwarf.c ) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ, рддреЛ '
objdump -W 6.out
'
objdump -W 6.out
рдФрд░
.debug_*
рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВред
рдЬреНрдЮрд╛рдд рдореБрджреНрджреЗ
- рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рд╕реБрдВрджрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗрд╡рд▓ рдЯрд╛рдЗрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдЗрд╕рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдПред
- C рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд░рдирдЯрд╛рдЗрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдЬрд╛рдирдХрд╛рд░реА рдЧрд╛рдпрдм рд╣реИред
- GDB рдХреЛ рдирд╛рдореЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддреА рд╣реИ рдФрд░
"fmt.Print"
рдХреЛ "fmt.Print"
рд╕рд╛рде рдПрдХ рдЕрд╕рдВрд░рдЪрд┐рдд рд╢рд╛рдмреНрджрд┐рдХ "fmt.Print"
рд░реВрдк рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВ "."
рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╣реЛрдирд╛ред рдпрд╣ pkg.(*MyType).Meth
рд▓рд┐рдП рдФрд░ рднреА рдЕрдзрд┐рдХ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ pkg.(*MyType).Meth
ред - рд╕рднреА рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░
main
рдкреИрдХреЗрдЬ рдХреЛ рджрд┐рдП рдЧрдП рд╣реИрдВред