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
}

функция (*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/

Spec-Zone.ru

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