Spec-Zone.ru › Go

Пакет gosym

  • import "debug/gosym"
  • Обзор
  • Указатель

Обзор

Пакет gosym предоставляет доступ к таблицам символов и номеров строк Go, встроенным в исполняемые файлы Go, созданные компиляторами gc.

Указатель

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

Файлы пакета

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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API