import "debug/gosym"

gcコンパイラによって生成されたGoバイナリに組み込まれているGoシンボルや行番号テーブルへのアクセスを実装しています。

パッケージファイル

pclntab.go symtab.go

DecodingError型

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

type DecodingError struct {
    // contains unexported fields
}

(*DecodingError) String関数

func (e *DecodingError) String() string

Func型

Funcは、ひとつの関数についての情報を収集します。

type Func struct {
    Entry uint64
    *Sym
    End       uint64
    Params    []*Sym
    Locals    []*Sym
    FrameSize int
    LineTable *LineTable
    Obj       *Obj
}

LineTable型

type LineTable struct {
    Data []byte
    PC   uint64
    Line int
}

NewLineTable関数

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

NewLineTableは、エンコードされたデータに対応する新しいPC/lineテーブルを返します。textには対応するテキストセグメントの開始アドレスを指定する必要があります。

(*LineTable) LineToPC関数

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

(*LineTable) PCToLine関数

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

Obj型

Objは、ひとつのオブジェクトファイルを表します。

type Obj struct {
    Funcs []Func
    Paths []Sym
}

Sym型

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

type Sym struct {
    Value  uint64
    Type   byte
    Name   string
    GoType uint64
    // 関数シンボルのときはFuncに一致します
    Func   *Func
}

(*Sym) BaseName関数

func (s *Sym) BaseName() string

BaseNameは、パッケージ名、またはレシーバ名なしのシンボル名を返します。

(*Sym) PackageName関数

func (s *Sym) PackageName() string

PackageNameは、シンボル名からパッケージ名を返します。存在しないときは空文字列を返します。

(*Sym) ReceiverName関数

func (s *Sym) ReceiverName() string

ReceiverNameは、シンボルのレシーバ型の名前を返します。存在しないときは空文字列を返します。

(*Sym) Static関数

func (s *Sym) Static() bool

Staticは、シンボルが静的(ファイル外に対し非可視)かどうかを返します。

Table型

Tableは、Goのシンボルテーブルを表します。これはプログラムからデコードされた全てのシンボルを保持し、シンボル、名前、アドレスを変換するメソッドを提供します。

type Table struct {
    Syms  []Sym
    Funcs []Func
    Files map[string]*Obj
    Objs  []Obj
}

NewTable関数

func NewTable(symtab []byte, pcln *LineTable) (*Table, os.Error)

NewTableは、データからGoのシンボルテーブルをデコードしメモリの内部表現で返します。

(*Table) LineToPC関数

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

LineToPCは、指定されたファイルと行で先頭のプログラムカウンタを検索します。行検索時にエラーが発生したときは、UnknownPathErrorまたはUnknownLineErrorを返します。

(*Table) LookupFunc関数

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

LookupFuncは、指定された名前のテキスト、データ、またはbssシンボルを返します。シンボルが存在しないときはnilを返します。

(*Table) LookupSym関数

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

LookupSymは、指定された名前のテキスト、データ、または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は、指定されたアドレスから開始しているテキスト、データ、またはbssシンボルを返します。(TODO:シンボルの中でどんなアドレスでも検索できるようにする)

UnknownFileError型

UnknownFileErrorは、シンボルテーブル内で特定のファイルの検索に失敗したことを表します。

type UnknownFileError string

(UnknownFileError) String関数

func (e UnknownFileError) String() string

UnknownLineError型

UnknownLineErrorは、行をプログラムカウンタにマップする際に失敗したことを表します。行がファイルの境界を越えているとき、または指定された行にコードが存在しないときに発生します。

type UnknownLineError struct {
    File string
    Line int
}

(*UnknownLineError) String関数

func (e *UnknownLineError) String() string