gosym - The Go Programming Language

Golang

Package gosym

import "debug/gosym"
Overview
Index

Overview ?

Overview ?

Package gosym implements access to the Go symbol and line number tables embedded in Go binaries generated by the gc compilers.

Index

type DecodingError
    func (e *DecodingError) Error() string
type Func
type LineTable
    func NewLineTable(data []byte, text uint64) *LineTable
    func (t *LineTable) LineToPC(line int, maxpc uint64) uint64
    func (t *LineTable) PCToLine(pc uint64) int
type Obj
type Sym
    func (s *Sym) BaseName() string
    func (s *Sym) PackageName() string
    func (s *Sym) ReceiverName() string
    func (s *Sym) Static() bool
type Table
    func NewTable(symtab []byte, pcln *LineTable) (*Table, error)
    func (t *Table) LineToPC(file string, line int) (pc uint64, fn *Func, err error)
    func (t *Table) LookupFunc(name string) *Func
    func (t *Table) LookupSym(name string) *Sym
    func (t *Table) PCToFunc(pc uint64) *Func
    func (t *Table) PCToLine(pc uint64) (file string, line int, fn *Func)
    func (t *Table) SymByAddr(addr uint64) *Sym
type UnknownFileError
    func (e UnknownFileError) Error() string
type UnknownLineError
    func (e *UnknownLineError) Error() string

Package files

pclntab.go symtab.go

type DecodingError

type DecodingError struct {
    // contains filtered or unexported fields
}

DecodingError represents an error during the decoding of the symbol table.

func (*DecodingError) Error

func (e *DecodingError) Error() string

type Func

type Func struct {
    Entry uint64
    *Sym
    End       uint64
    Params    []*Sym
    Locals    []*Sym
    FrameSize int
    LineTable *LineTable
    Obj       *Obj
}

A Func collects information about a single function.

type LineTable

type LineTable struct {
    Data []byte
    PC   uint64
    Line int
}

func NewLineTable

func NewLineTable(data []byte, text uint64) *LineTable

NewLineTable returns a new PC/line table corresponding to the encoded data. Text must be the start address of the corresponding text segment.

func (*LineTable) LineToPC

func (t *LineTable) LineToPC(line int, maxpc uint64) uint64

func (*LineTable) PCToLine

func (t *LineTable) PCToLine(pc uint64) int

type Obj

type Obj struct {
    Funcs []Func
    Paths []Sym
}

An Obj represents a single object file.

type Sym

type Sym struct {
    Value  uint64
    Type   byte
    Name   string
    GoType uint64
    // If this symbol if a function symbol, the corresponding Func
    Func *Func
}

A Sym represents a single symbol table entry.

func (*Sym) BaseName

func (s *Sym) BaseName() string

BaseName returns the symbol name without the package or receiver name.

func (*Sym) PackageName

func (s *Sym) PackageName() string

PackageName returns the package part of the symbol name, or the empty string if there is none.

func (*Sym) ReceiverName

func (s *Sym) ReceiverName() string

ReceiverName returns the receiver type name of this symbol, or the empty string if there is none.

func (*Sym) Static

func (s *Sym) Static() bool

Static returns whether this symbol is static (not visible outside its file).

type Table

type Table struct {
    Syms  []Sym
    Funcs []Func
    Files map[string]*Obj
    Objs  []Obj
}

Table represents a Go symbol table. It stores all of the symbols decoded from the program and provides methods to translate between symbols, names, and addresses.

func NewTable

func NewTable(symtab []byte, pcln *LineTable) (*Table, error)

NewTable decodes the Go symbol table in data, returning an in-memory representation.

func (*Table) LineToPC

func (t *Table) LineToPC(file string, line int) (pc uint64, fn *Func, err error)

LineToPC looks up the first program counter on the given line in the named file. Returns UnknownPathError or UnknownLineError if there is an error looking up this line.

func (*Table) LookupFunc

func (t *Table) LookupFunc(name string) *Func

LookupFunc returns the text, data, or bss symbol with the given name, or nil if no such symbol is found.

func (*Table) LookupSym

func (t *Table) LookupSym(name string) *Sym

LookupSym returns the text, data, or bss symbol with the given name, or nil if no such symbol is found.

func (*Table) PCToFunc

func (t *Table) PCToFunc(pc uint64) *Func

PCToFunc returns the function containing the program counter pc, or nil if there is no such function.

func (*Table) PCToLine

func (t *Table) PCToLine(pc uint64) (file string, line int, fn *Func)

PCToLine looks up line number information for a program counter. If there is no information, it returns fn == nil.

func (*Table) SymByAddr

func (t *Table) SymByAddr(addr uint64) *Sym

SymByAddr returns the text, data, or bss symbol starting at the given address. TODO(rsc): Allow lookup by any address within the symbol.

type UnknownFileError

type UnknownFileError string

UnknownFileError represents a failure to find the specific file in the symbol table.

func (UnknownFileError) Error

func (e UnknownFileError) Error() string

type UnknownLineError

type UnknownLineError struct {
    File string
    Line int
}

UnknownLineError represents a failure to map a line to a program counter, either because the line is beyond the bounds of the file or because there is no code on the given line.

func (*UnknownLineError) Error

func (e *UnknownLineError) Error() string