...

パッケージ gosym

import "debug/gosym"
概要
目次

概要 ▾

gosym パッケージは,gc コンパイラによって生成される Go バイナリに埋め込まれている Go シンボルと行番号テーブルへのアクセスを実装します。

type DecodingError

DecodingError は,シンボルテーブルのデコード中のエラーを表します。

type DecodingError struct {
    // エクスポートされていないフィールドがあります
}

func (*DecodingError) Error

func (e *DecodingError) Error() string

type Func

Func は 1 つの機能に関する情報を収集します。

type Func struct {
    Entry uint64
    *Sym
    End       uint64
    Params    []*Sym // Go 1.3 以降のバイナリでは nil
    Locals    []*Sym // Go 1.3 以降のバイナリでは nil
    FrameSize int
    LineTable *LineTable
    Obj       *Obj
}

type LineTable

LineTable は,プログラムカウンタを行番号にマッピングするデータ構造です。

Go 1.1 以前では, (Func で表される) 各関数はそれぞれ独自の LineTable を持ち,その行番号はプログラム内のすべてのソース行の番号付けに対応しています。 その絶対行番号は,ファイル内のファイル名と行番号に別々に変換する必要があります。

Go 1.2 では,データのフォーマットが変更され,プログラム全体に対して 1 つの LineTable があり,すべての Func で共有されています。 絶対行番号はなく,特定のファイル内の行番号だけがあります。

ほとんどの場合, LineTable のメソッドはパッケージの内部詳細として扱われるべきです。 呼び出し側は代わりに Table のメソッドを使うべきです。

type LineTable struct {
    Data []byte
    PC   uint64
    Line int
    // エクスポートされていないフィールドがあります
}

func NewLineTable

func NewLineTable(data []byte, text uint64) *LineTable

NewLineTable は,エンコードされたデータに対応する新しい PC/行テーブルを返します。 テキストは対応するテキストセグメントの開始アドレスでなければなりません。

func (*LineTable) LineToPC

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

LineToPC returns the program counter for the given line number, considering only program counters before maxpc.

Deprecated: Use Table's LineToPC method instead.

func (*LineTable) PCToLine

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

PCToLine returns the line number for the given program counter.

Deprecated: Use Table's PCToLine method instead.

type Obj

Obj は,シンボルテーブル内の関数の集まりを表します。

バイナリを別々の Obj に分割する正確な方法は,シンボルテーブルフォーマットの内部詳細です。

Go の初期のバージョンでは,各ソースファイルは異なる Obj になりました。

Go 1 と Go 1.1 では,各パッケージはすべての Go ソースに対して 1 つの Obj と, C ソースファイルにつき 1 つの Obj を生成しました。

Go 1.2 では,プログラム全体に対して 1 つの Obj があります。

type Obj struct {
    // Funcs は Obj の関数のリストです。
    Funcs []Func

    // Go 1.1 以前では, Paths は Obj を生成したソースファイル名に対応するシンボルのリストです。
    // Go 1.2 では, Paths はゼロです。
    // Table.Files のキーを使ってソースファイルのリストを取得します。
    Paths []Sym // メタ
}

type Sym

Sym は 1 つのシンボルテーブルエントリを表します。

type Sym struct {
    Value  uint64
    Type   byte
    Name   string
    GoType uint64
    // このシンボルが関数シンボルの場合は,対応する 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

Static は,このシンボルが静的かどうかを報告します (ファイルの外には表示されません) 。

type Table

Table は Go シンボルテーブルを表します。 プログラムからデコードされたすべてのシンボルを格納し,シンボル,名前,およびアドレスを変換するためのメソッドを提供します。

type Table struct {
    Syms  []Sym // Go 1.3 以降のバイナリでは nil
    Funcs []Func
    Files map[string]*Obj // Go 1.2 以降のバイナリでは nil
    Objs  []Obj           // Go 1.2 以降のバイナリでは nil
    // エクスポートされていないフィールドがあります
}

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