Documentation
¶
Overview ¶
gosymパッケージは、gcコンパイラによって生成されたGoバイナリに埋め込まれた Goのシンボルと行番号のテーブルへのアクセスを実装します。
Index ¶
- type DecodingError
- type Func
- type LineTable
- type Obj
- type Sym
- type Table
- func (t *Table) LineToPC(file string, line int) (pc uint64, fn *Func, err error)
- func (t *Table) LookupFunc(name string) *Func
- func (t *Table) LookupSym(name string) *Sym
- func (t *Table) PCToFunc(pc uint64) *Func
- func (t *Table) PCToLine(pc uint64) (file string, line int, fn *Func)
- func (t *Table) SymByAddr(addr uint64) *Sym
- type UnknownFileError
- type UnknownLineError
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DecodingError ¶
type DecodingError struct {
// contains filtered or unexported fields
}
DecodingError represents an error during the decoding of the symbol table.
func (*DecodingError) Error ¶
func (e *DecodingError) Error() string
type Func ¶
type Func struct { Entry uint64 *Sym End uint64 Params []*Sym Locals []*Sym FrameSize int LineTable *LineTable Obj *Obj }
Funcは、単一の関数に関する情報を収集します。
type LineTable ¶
LineTableは、プログラムカウンタを行番号にマッピングするデータ構造です。
Go 1.1以前では、各関数(Funcによって表される)は独自のLineTableを持ち、 行番号はプログラム内のすべてのソース行を通じての番号付けに対応していました。 その絶対行番号は、別途ファイル名とファイル内の行番号に変換する必要がありました。
Go 1.2では、データの形式が変更され、プログラム全体で単一のLineTableが存在し、 すべてのFuncが共有し、絶対行番号はなく、特定のファイル内の行番号のみが存在します。
大部分において、LineTableのメソッドはパッケージの内部詳細として扱うべきであり、 呼び出し元は代わりにTableのメソッドを使用するべきです。
func NewLineTable ¶
NewLineTableは、エンコードされたデータに対応する新しいPC/行テーブルを返します。 Textは、対応するテキストセグメントの開始アドレスでなければなりません。
type Obj ¶
type Obj struct { // Funcsは、Obj内の関数のリストです。 Funcs []Func // Go 1.1以前では、PathsはObjを生成したソースファイル名に対応するシンボルのリストです。 // Go 1.2では、Pathsはnilです。 // ソースファイルのリストを取得するには、Table.Filesのキーを使用します。 Paths []Sym }
Objは、シンボルテーブル内の一連の関数を表します。
バイナリを別々のObjに分割する具体的な方法は、シンボルテーブル形式の内部詳細です。
Goの初期のバージョンでは、各ソースファイルが異なるObjになりました。
Go 1とGo 1.1では、各パッケージはすべてのGoソースに対して1つのObjを生成し、 Cソースファイルごとに1つのObjを生成しました。
Go 1.2では、プログラム全体に対して単一のObjが存在します。
type Sym ¶
type Sym struct { Value uint64 Type byte Name string GoType uint64 // このシンボルが関数シンボルである場合、対応するFunc Func *Func // contains filtered or unexported fields }
Symは、単一のシンボルテーブルエントリを表します。
func (*Sym) PackageName ¶
PackageNameは、シンボル名のパッケージ部分を返します。 パッケージ部分がない場合は空の文字列を返します。
func (*Sym) ReceiverName ¶
ReceiverNameは、このシンボルのレシーバタイプ名を返します。 レシーバ名がない場合は空の文字列を返します。レシーバ名は、 s.Nameがパッケージ名で完全に指定されている場合にのみ検出されます。
type Table ¶
type Table struct { Syms []Sym Funcs []Func Files map[string]*Obj Objs []Obj // contains filtered or unexported fields }
TableはGoのシンボルテーブルを表します。プログラムからデコードされたすべての シンボルを保存し、シンボル、名前、アドレス間の変換を行うメソッドを提供します。
func NewTable ¶
NewTableはGoのシンボルテーブル(ELFの".gosymtab"セクション)をデコードし、 メモリ内表現を返します。 Go 1.3以降、Goのシンボルテーブルにはシンボルデータが含まれなくなりました。
func (*Table) LineToPC ¶
LineToPCは、指定されたファイルの指定された行で最初のプログラムカウンタを検索します。 この行を検索中にエラーが発生した場合、UnknownPathErrorまたはUnknownLineErrorを返します。
func (*Table) LookupFunc ¶
LookupFuncは、指定された名前を持つテキスト、データ、またはbssシンボルを返します。 そのようなシンボルが見つからない場合はnilを返します。
func (*Table) LookupSym ¶
LookupSymは、指定された名前を持つテキスト、データ、またはbssシンボルを返します。 そのようなシンボルが見つからない場合はnilを返します。
type UnknownFileError ¶
type UnknownFileError string
UnknownFileErrorは、シンボルテーブル内で特定のファイルを見つけることができなかったことを表すエラーです。
func (UnknownFileError) Error ¶
func (e UnknownFileError) Error() string
type UnknownLineError ¶
UnknownLineErrorは、行をプログラムカウンタにマッピングできなかったことを表すエラーです。 これは、行がファイルの範囲を超えているか、指定された行にコードがないためです。
func (*UnknownLineError) Error ¶
func (e *UnknownLineError) Error() string