Black Lives Matter. Support the Equal Justice Initiative.

Package gosym

import "debug/gosym"
Overview
Index

Overview ▾

软件包gosym实现了对gc编译器生成的Go二进制文件中嵌入的Go符号和行号表的访问.

type DecodingError

DecodingError表示符号表解码期间的错误.

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

func (*DecodingError) Error

func (e *DecodingError) Error() string

type 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
}

type LineTable

LineTable是将程序计数器映射到行号的数据结构.

在Go 1.1和更低版本中,每个函数(由Func表示)都有自己的LineTable,并且行号对应于程序中所有文件中所有源行的编号. 然后必须将该绝对行号分别转换为文件名和文件中的行号.

在Go 1.2中,数据的格式已更改,因此整个程序只有一个LineTable,由所有Funcs共享,并且没有绝对的行号,只有特定文件中的行号.

在大多数情况下,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 /线表. 文本必须是相应文本段的起始地址.

func (*LineTable) LineToPC

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

LineToPC返回给定行号的程序计数器,仅考虑maxpc之前的程序计数器.

不推荐使用:改用Table的LineToPC方法.

func (*LineTable) PCToLine

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

PCToLine返回给定程序计数器的行号.

不推荐使用:改用Table的PCToLine方法.

type Obj

Obj代表符号表中的功能集合.

将二进制文件划分为单独的Objs的确切方法是符号表格式的内部细节.

在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
}

type 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
}

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返回此符号的接收者类型名称,如果没有,则返回空字符串.

func (*Sym) Static

func (s *Sym) Static() bool

静态报告此符号是否为静态(在文件外部不可见).

type Table

表表示Go符号表. 它存储从程序解码的所有符号,并提供在符号,名称和地址之间转换的方法.

type Table struct {
    Syms  []Sym // nil for Go 1.3 and later binaries
    Funcs []Func
    Files map[string]*Obj // nil for Go 1.2 and later binaries
    Objs  []Obj           // nil for Go 1.2 and later binaries
    // contains filtered or unexported fields
}

func NewTable

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

NewTable解码Go符号表(ELF中的" .gosymtab"部分),返回内存中的表示形式. 从Go 1.3开始,Go符号表不再包含符号数据.

func (*Table) LineToPC

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

LineToPC在命名文件的给定行中查找第一个程序计数器. 如果在查找此行时出错,则返回UnknownPathError或UnknownLineError.

func (*Table) LookupFunc

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

LookupFunc返回具有给定名称的文本,数据或bss符号,如果找不到此类符号,则返回nil.

func (*Table) LookupSym

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

LookupSym返回具有给定名称的文本,数据或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返回从给定地址开始的文本,数据或bss符号.

type UnknownFileError

UnknownFileError表示无法在符号表中找到特定文件.

type UnknownFileError string

func (UnknownFileError) Error

func (e UnknownFileError) Error() string

type UnknownLineError

UnknownLineError表示无法将行映射到程序计数器,这是因为该行超出了文件的范围,或者因为给定行上没有代码.

type UnknownLineError struct {
    File string
    Line int
}

func (*UnknownLineError) Error

func (e *UnknownLineError) Error() string

by  ICOPY.SITE