Пакет gosym
Обзор
Пакет gosym реализует доступ к таблицам символов и номеров строк Go, встроенным в исполняемые файлы Go, сгенерированные компиляторами gc.
Индекс
Файлы пакета
pclntab.go symtab.go
тип DecodingError
DecodingError представляет ошибку при декодировании таблицы символов.
type DecodingError struct {
// contains filtered or unexported fields
}
функция (*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
}
функция NewLineTable
func NewLineTable(data []byte, text uint64) *LineTable
NewLineTable возвращает новую таблицу PC/строка, соответствующую закодированным данным. Text должен быть начальным адресом соответствующего текстового сегмента, с точным значением, хранящимся в символе 'runtime.text'. Это значение может отличаться от начального адреса текстового сегмента, если бинарник был скомпилирован с включённым cgo.
функция (*LineTable) LineToPC
func (t *LineTable) LineToPC(line int, maxpc uint64) uint64
LineToPC возвращает указатель программы для данного номера строки, учитывая только указатели программы перед maxpc.
Устарело: Используйте вместо него метод LineToPC таблицы.
функция (*LineTable) PCToLine
func (t *LineTable) PCToLine(pc uint64) int
PCToLine возвращает номер строки для данного указателя программы.
Устарело: Используйте вместо него метод PCToLine таблицы.
тип Obj
Obj представляет собой набор функций в таблице символов.
Точный метод разделения двоичного файла на отдельные Obj — это внутренняя деталь формата таблицы символов.
В ранних версиях Go каждый исходный файл становился отдельным Obj.
В Go 1 и Go 1.1 каждый пакет производил один Obj для всех исходных кодов Go и один Obj на файл исходного кода C.
В 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
}
функция (*Sym) BaseName
func (s *Sym) BaseName() string
BaseName возвращает имя символа без имени пакета или получателя.
функция (*Sym) PackageName
func (s *Sym) PackageName() string
PackageName возвращает часть имени символа, относящуюся к пакету, или пустую строку, если её нет.
функция (*Sym) ReceiverName
func (s *Sym) ReceiverName() string
ReceiverName возвращает имя типа получателя этого символа или пустую строку, если его нет. Имя получателя обнаруживается только в том случае, если s.Name полностью указано с именем пакета.
функция (*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
}
функция NewTable
func NewTable(symtab []byte, pcln *LineTable) (*Table, error)
NewTable декодирует таблицу символов Go (раздел ".gosymtab" в ELF), возвращая представление в памяти. Начиная с Go 1.3, таблица символов Go больше не содержит данных символов.
функция (*Table) LineToPC
func (t *Table) LineToPC(file string, line int) (pc uint64, fn *Func, err error)
LineToPC ищет первый указатель программы на заданной строке в указанном файле. Возвращает UnknownFileError или UnknownLineError, если при поиске этой строки произошла ошибка.
функция (*Table) LookupFunc
func (t *Table) LookupFunc(name string) *Func
LookupFunc возвращает символ text, data или bss с заданным именем или nil, если такой символ не найден.
функция (*Table) LookupSym
func (t *Table) LookupSym(name string) *Sym
LookupSym возвращает символ text, data или bss с заданным именем или nil, если такой символ не найден.
функция (*Table) PCToFunc
func (t *Table) PCToFunc(pc uint64) *Func
PCToFunc возвращает функцию, содержащую указатель программы pc, или nil, если такой функции нет.
функция (*Table) PCToLine
func (t *Table) PCToLine(pc uint64) (file string, line int, fn *Func)
PCToLine ищет информацию о номере строки для указателя программы. Если информации нет, возвращает fn == nil.
функция (*Table) SymByAddr
func (t *Table) SymByAddr(addr uint64) *Sym
SymByAddr возвращает символ text, data или bss, начинающийся с заданного адреса.
тип UnknownFileError
UnknownFileError представляет собой ошибку поиска указанного файла в таблице символов.
type UnknownFileError string
функция (UnknownFileError) Error
func (e UnknownFileError) Error() string
тип UnknownLineError
UnknownLineError представляет собой ошибку сопоставления строки с указателем программы, либо потому, что строка выходит за пределы файла, либо потому, что в данной строке нет кода.
type UnknownLineError struct {
File string
Line int
}
функция (*UnknownLineError) Error
func (e *UnknownLineError) Error() string
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/debug/gosym/