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
Trackback URL
Comments