Пакет gosym
Обзор
Пакет gosym предоставляет доступ к таблицам символов и номеров строк Go, встроенным в исполняемые файлы Go, созданные компиляторами gc.
Указатель
Файлы пакета
pclntab.go symtab.go
тип DecodingError
DecodingError представляет ошибку, возникшую при декодировании таблицы символов.
type DecodingError struct {
// contains filtered or unexported fields
}
func (*DecodingError) Error
func (e *DecodingError) Error() string
тип Func
Func содержит информацию об одной функции.
type Func struct {
Entry uint64
*Sym
End uint64
Params []*Sym // nil for Go 1.3 and later binaries
Locals []*Sym // nil for Go 1.3 and later binaries
FrameSize int
LineTable *LineTable
Obj *Obj
}
тип LineTable
LineTable — это структура данных, сопоставляющая счетчики команд с номерами строк.
В Go 1.1 и более ранних версиях у каждой функции (представленной типом Func) была собственная LineTable, а номер строки соответствовал нумерации всех исходных строк программы во всех файлах. Затем этот абсолютный номер строки нужно было отдельно преобразовать в имя файла и номер строки внутри файла.
В Go 1.2 формат данных изменился: теперь для всей программы используется одна LineTable, общая для всех Func, а абсолютные номера строк отсутствуют — есть только номера строк в конкретных файлах.
В большинстве случаев методы LineTable следует считать внутренней деталью пакета; вместо них вызывающим сторонам следует использовать методы Table.
type LineTable struct {
Data []byte
PC uint64
Line int
// contains filtered or unexported fields
}
func NewLineTable
func NewLineTable(data []byte, text uint64) *LineTable
NewLineTable возвращает новую таблицу PC/строк, соответствующую закодированным данным. Text должен быть начальным адресом соответствующего сегмента text и точно совпадать со значением, хранящимся в символе 'runtime.text'. Если двоичный файл был собран с включенным cgo, это значение может отличаться от начального адреса сегмента text.
func (*LineTable) LineToPC
func (t *LineTable) LineToPC(line int, maxpc uint64) uint64
LineToPC возвращает счетчик команд для указанного номера строки, рассматривая только счетчики команд, меньшие maxpc.
Устарело: вместо этого используйте метод LineToPC типа Table.
func (*LineTable) PCToLine
func (t *LineTable) PCToLine(pc uint64) int
PCToLine возвращает номер строки для указанного счетчика команд.
Устарело: вместо этого используйте метод PCToLine типа Table.
тип Obj
Obj представляет набор функций в таблице символов.
Точный способ разделения двоичного файла на отдельные Obj является внутренней деталью формата таблицы символов.
В ранних версиях Go для каждого исходного файла создавался отдельный Obj.
В Go 1 и Go 1.1 для всех исходных файлов Go пакета создавался один Obj, а для каждого исходного файла C — отдельный Obj.
В Go 1.2 для всей программы создается один Obj.
type Obj struct {
// Funcs is a list of functions in the Obj.
Funcs []Func
// In Go 1.1 and earlier, Paths is a list of symbols corresponding
// to the source file names that produced the Obj.
// In Go 1.2, Paths is nil.
// Use the keys of Table.Files to obtain a list of source files.
Paths []Sym // meta
}
тип Sym
Sym представляет одну запись таблицы символов.
type Sym struct {
Value uint64
Type byte
Name string
GoType uint64
// If this symbol is a function symbol, the corresponding Func
Func *Func
// contains filtered or unexported fields
}
func (*Sym) BaseName
func (s *Sym) BaseName() string
BaseName возвращает имя символа без имени пакета или получателя.
func (*Sym) PackageName
func (s *Sym) PackageName() string
PackageName возвращает часть имени символа, относящуюся к пакету, или пустую строку, если ее нет.
func (*Sym) ReceiverName
func (s *Sym) ReceiverName() string
ReceiverName возвращает имя типа-получателя этого символа или пустую строку, если его нет. Имя получателя определяется только в том случае, если s.Name указано полностью, включая имя пакета.
func (*Sym) Static
func (s *Sym) Static() bool
Static сообщает, является ли этот символ статическим (то есть невидимым за пределами своего файла).
тип Table
Table представляет таблицу символов Go. Она хранит все символы, декодированные из программы, и предоставляет методы для преобразования между символами, именами и адресами.
type Table struct {
Syms []Sym // nil for Go 1.3 and later binaries
Funcs []Func
Files map[string]*Obj // for Go 1.2 and later all files map to one Obj
Objs []Obj // for Go 1.2 and later only one Obj in slice
// contains filtered or unexported fields
}
func NewTable
func NewTable(symtab []byte, pcln *LineTable) (*Table, error)
NewTable декодирует таблицу символов Go (секцию ".gosymtab" в ELF) и возвращает ее представление в памяти. Начиная с Go 1.3, таблица символов Go больше не содержит данных о символах; вызывающим сторонам следует передавать nil в параметре symtab.
func (*Table) LineToPC
func (t *Table) LineToPC(file string, line int) (pc uint64, fn *Func, err error)
LineToPC находит первый счетчик команд на указанной строке в указанном файле. Если при поиске этой строки возникает ошибка, метод возвращает UnknownFileError или UnknownLineError.
func (*Table) LookupFunc
func (t *Table) LookupFunc(name string) *Func
LookupFunc возвращает символ text, data или bss с указанным именем либо nil, если такой символ не найден.
func (*Table) LookupSym
func (t *Table) LookupSym(name string) *Sym
LookupSym возвращает символ text, data или bss с указанным именем либо nil, если такой символ не найден.
func (*Table) PCToFunc
func (t *Table) PCToFunc(pc uint64) *Func
PCToFunc возвращает функцию, содержащую счетчик команд pc, либо nil, если такой функции нет.
func (*Table) PCToLine
func (t *Table) PCToLine(pc uint64) (file string, line int, fn *Func)
PCToLine ищет информацию о номере строки для счетчика команд. Если информация отсутствует, метод возвращает fn == nil.
func (*Table) SymByAddr
func (t *Table) SymByAddr(addr uint64) *Sym
SymByAddr возвращает символ text, data или bss, начинающийся по указанному адресу.
тип UnknownFileError
UnknownFileError представляет ситуацию, когда не удалось найти указанный файл в таблице символов.
type UnknownFileError string
func (UnknownFileError) Error
func (e UnknownFileError) Error() string
тип UnknownLineError
UnknownLineError представляет ситуацию, когда не удалось сопоставить строку со счетчиком команд: либо строка выходит за пределы файла, либо в указанной строке нет кода.
type UnknownLineError struct {
File string
Line int
}
func (*UnknownLineError) Error
func (e *UnknownLineError) Error() string
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/debug/gosym/