import "debug/dwarf"

DWARF 2.0(http://dwarfstd.org/doc/dwarf-2.0.0.pdf)で定義されている実行ファイルからロードされたDWARFデバッグ情報へのアクセスを提供します。

パッケージファイル

buf.go const.go entry.go open.go type.go unit.go

AddrType型

AddrTypeは、マシンアドレス型を表わします。

type AddrType struct {
    BasicType
}

ArrayType型

ArrayTypeは、固定長配列型を表わします。

type ArrayType struct {
    CommonType
    Type          Type
    StrideBitSize int64 // if > 0, number of bits to hold each element
    Count         int64 // if == -1, an incomplete array, like char x[].
}

(*ArrayType) Size関数

func (t *ArrayType) Size() int64

(*ArrayType) String関数

func (t *ArrayType) String() string

Attr型

Attrは、DWARFフィールドの属性型を識別します。

type Attr uint32

const (
    AttrSibling        Attr = 0x01
    AttrLocation       Attr = 0x02
    AttrName           Attr = 0x03
    AttrOrdering       Attr = 0x09
    AttrByteSize       Attr = 0x0B
    AttrBitOffset      Attr = 0x0C
    AttrBitSize        Attr = 0x0D
    AttrStmtList       Attr = 0x10
    AttrLowpc          Attr = 0x11
    AttrHighpc         Attr = 0x12
    AttrLanguage       Attr = 0x13
    AttrDiscr          Attr = 0x15
    AttrDiscrValue     Attr = 0x16
    AttrVisibility     Attr = 0x17
    AttrImport         Attr = 0x18
    AttrStringLength   Attr = 0x19
    AttrCommonRef      Attr = 0x1A
    AttrCompDir        Attr = 0x1B
    AttrConstValue     Attr = 0x1C
    AttrContainingType Attr = 0x1D
    AttrDefaultValue   Attr = 0x1E
    AttrInline         Attr = 0x20
    AttrIsOptional     Attr = 0x21
    AttrLowerBound     Attr = 0x22
    AttrProducer       Attr = 0x25
    AttrPrototyped     Attr = 0x27
    AttrReturnAddr     Attr = 0x2A
    AttrStartScope     Attr = 0x2C
    AttrStrideSize     Attr = 0x2E
    AttrUpperBound     Attr = 0x2F
    AttrAbstractOrigin Attr = 0x31
    AttrAccessibility  Attr = 0x32
    AttrAddrClass      Attr = 0x33
    AttrArtificial     Attr = 0x34
    AttrBaseTypes      Attr = 0x35
    AttrCalling        Attr = 0x36
    AttrCount          Attr = 0x37
    AttrDataMemberLoc  Attr = 0x38
    AttrDeclColumn     Attr = 0x39
    AttrDeclFile       Attr = 0x3A
    AttrDeclLine       Attr = 0x3B
    AttrDeclaration    Attr = 0x3C
    AttrDiscrList      Attr = 0x3D
    AttrEncoding       Attr = 0x3E
    AttrExternal       Attr = 0x3F
    AttrFrameBase      Attr = 0x40
    AttrFriend         Attr = 0x41
    AttrIdentifierCase Attr = 0x42
    AttrMacroInfo      Attr = 0x43
    AttrNamelistItem   Attr = 0x44
    AttrPriority       Attr = 0x45
    AttrSegment        Attr = 0x46
    AttrSpecification  Attr = 0x47
    AttrStaticLink     Attr = 0x48
    AttrType           Attr = 0x49
    AttrUseLocation    Attr = 0x4A
    AttrVarParam       Attr = 0x4B
    AttrVirtuality     Attr = 0x4C
    AttrVtableElemLoc  Attr = 0x4D
    AttrAllocated      Attr = 0x4E
    AttrAssociated     Attr = 0x4F
    AttrDataLocation   Attr = 0x50
    AttrStride         Attr = 0x51
    AttrEntrypc        Attr = 0x52
    AttrUseUTF8        Attr = 0x53
    AttrExtension      Attr = 0x54
    AttrRanges         Attr = 0x55
    AttrTrampoline     Attr = 0x56
    AttrCallColumn     Attr = 0x57
    AttrCallFile       Attr = 0x58
    AttrCallLine       Attr = 0x59
    AttrDescription    Attr = 0x5A
)

(Attr) GoString関数

func (a Attr) GoString() string

(Attr) String関数

func (a Attr) String() string

BasicType型

BasicTypeは、全ての基本型に共通するフィールドを保持します。

type BasicType struct {
    CommonType
    BitSize   int64
    BitOffset int64
}

(*BasicType) Basic関数

func (b *BasicType) Basic() *BasicType

(*BasicType) String関数

func (t *BasicType) String() string

BoolType型

BoolTypeは、boolean型を表わします。

type BoolType struct {
    BasicType
}

CharType型

CharTypeは、符号付き文字型を表わします。

type CharType struct {
    BasicType
}

CommonType型

CommonTypeは、複数の型に共通するフィールドを保持します。フィールドが不明な場合、または指定された型に適用出来ない場合はゼロ値が使われます。

type CommonType struct {
    ByteSize int64  // size of value of this type, in bytes
    Name     string // name that can be used to refer to type
}

(*CommonType) Common関数

func (c *CommonType) Common() *CommonType

(*CommonType) Size関数

func (c *CommonType) Size() int64

ComplexType型

ComplexTypeは、浮動小数点型を表わします。

type ComplexType struct {
    BasicType
}

Data型

Dataは、実行ファイル(ELF 、Mach-Oなど)からロードされたDWARFデバッグ情報を表わします。

type Data struct {
    // contains unexported fields
}

New関数

func New(abbrev, aranges, frame, info, line, pubnames, ranges, str []byte) (*Data, os.Error)

Newは、指定されたパラメータで初期化した新しいDataオブジェクトを返します。クライアントは通常、直接Newを呼び出すのではなく、未確定関数(今後名前をつけます)を使用してください。

[]byte引数はオブジェクトファイルの対応するデバッグセクションからのデータです。例えば、ELFオブジェクトにおいてabbrevは”.debug_abbrev”セクションの内容となります。

(*Data) Reader関数

func (d *Data) Reader() *Reader

Readerは、Dataの新しいリーダを返します。リーダはDWARF “info”セクションのバイトオフセット0に配置されます。

(*Data) Type関数

func (d *Data) Type(off Offset) (Type, os.Error)

DecodeError型

type DecodeError struct {
    Name   string
    Offset Offset
    Error  string
}

(DecodeError) String関数

func (e DecodeError) String() string

DotDotDotType型

DotDotDotTypeは、可変関数パラメータ(…)を表わします。

type DotDotDotType struct {
    CommonType
}

(*DotDotDotType) String関数

func (t *DotDotDotType) String() string

Entry型

Entryは、属性と値のペアのシーケンスです。

type Entry struct {
    Offset   Offset // offset of Entry in DWARF info
    Tag      Tag    // tag (kind of Entry)
    Children bool   // whether Entry is followed by children
    Field    []Field
}

(*Entry) Val関数

func (e *Entry) Val(a Attr) interface{}

Valは、Entry内の属性Attrに関連する値を返します。属性が存在しない場合はnilを返します。

通常は次のようにして、nilでないか、また望んだ動的な型を持っているか一緒にチェックします。

v, ok := e.Val(AttrSibling).(int64);

EnumType型

EnumTypeは、列挙された型を表します。CommonTypeにおいて直接整数型で指定できるのはByteSizeのみです。

type EnumType struct {
    CommonType
    EnumName string
    Val      []*EnumValue
}

(*EnumType) String関数

func (t *EnumType) String() string

EnumValue型

EnumValueは、一つの列挙値を表します。

type EnumValue struct {
    Name string
    Val  int64
}

Field型

Fieldは、Entry内の属性と値のセットです。

type Field struct {
    Attr Attr
    Val  interface{}
}

FloatType型

FloatTypeは、浮動小数点型を表します。

type FloatType struct {
    BasicType
}

FuncType型

FuncTypeは、関数型を表します。

type FuncType struct {
    CommonType
    ReturnType Type
    ParamType  []Type
}

(*FuncType) String関数

func (t *FuncType) String() string

IntType型

IntTypeは、符号付き整数型を表します。

type IntType struct {
    BasicType
}

Offset型

Offsetは、DWARF情報内でのEntryの位置を表します。(Reader.Seekを参照)

type Offset uint32

PtrType型

PtrTypeは、ポインタ型を表します。

type PtrType struct {
    CommonType
    Type Type
}

(*PtrType) String関数

func (t *PtrType) String() string

QualType型

QualTypeは、C/C++言語の”const”、”restrict”、”volatile”修飾子の型を表します。

type QualType struct {
    CommonType
    Qual string
    Type Type
}

(*QualType) Size関数

func (t *QualType) Size() int64

(*QualType) String関数

func (t *QualType) String() string

Reader型

Readerは、DWARF “info” セクションからEntry構造を読み込むことができます。Entryはツリー構造で配置されてます。ReaderのNext関数は行きがけ順で連続するエントリを返し、エントリが子を持つ場合はChildrenフィールドはtrueであり、またその子へと順に辿っていき、EntryのTagが0になると終了します。

type Reader struct {
    // contains unexported fields
}

(*Reader) Next関数

func (r *Reader) Next() (*Entry, os.Error)

Nextは、エンコードされたエントリストリームから次のエントリを読み込みます。セクションの終わりに達した際にnilが返されます。カレントオフセットが無効な場合、またはオフセット位置のデータが有効なEntryとして解読できない場合はエラーを返します。

(*Reader) Seek関数

func (r *Reader) Seek(off Offset)

Seekは、エンコードされたエントリストリーム内のオフセットoffへReaderの位置を移動します。オフセット0は先頭エントリを表すために使用することができます。

(*Reader) SkipChildren関数

func (r *Reader) SkipChildren()

SkipChildrenは、Nextによって返された最後のEntryと関連している子エントリをスキップします。Entryが子を持っていない場合、またはNextが呼び出されていない場合は何もしません。

StructField型

StructFieldは、構造体、共用体、またはC++のクラス型のフィールドを表します。

type StructField struct {
    Name       string
    Type       Type
    ByteOffset int64
    ByteSize   int64
    BitOffset  int64 // within the ByteSize bytes at ByteOffset
    BitSize    int64 // zero if not a bit field
}

StructType型

StructTypeは、構造体、共用体、またはC++のクラス型を表します。

type StructType struct {
    CommonType
    StructName string
    Kind       string // "struct", "union", or "class".
    Field      []*StructField
    Incomplete bool // if true, struct, union, class is declared but not defined
}

(*StructType) Defn関数

func (t *StructType) Defn() string

(*StructType) String関数

func (t *StructType) String() string

Tag型

Tagは、Entryの分類(型)を表します。

type Tag uint32

const (
    TagArrayType              Tag = 0x01
    TagClassType              Tag = 0x02
    TagEntryPoint             Tag = 0x03
    TagEnumerationType        Tag = 0x04
    TagFormalParameter        Tag = 0x05
    TagImportedDeclaration    Tag = 0x08
    TagLabel                  Tag = 0x0A
    TagLexDwarfBlock          Tag = 0x0B
    TagMember                 Tag = 0x0D
    TagPointerType            Tag = 0x0F
    TagReferenceType          Tag = 0x10
    TagCompileUnit            Tag = 0x11
    TagStringType             Tag = 0x12
    TagStructType             Tag = 0x13
    TagSubroutineType         Tag = 0x15
    TagTypedef                Tag = 0x16
    TagUnionType              Tag = 0x17
    TagUnspecifiedParameters  Tag = 0x18
    TagVariant                Tag = 0x19
    TagCommonDwarfBlock       Tag = 0x1A
    TagCommonInclusion        Tag = 0x1B
    TagInheritance            Tag = 0x1C
    TagInlinedSubroutine      Tag = 0x1D
    TagModule                 Tag = 0x1E
    TagPtrToMemberType        Tag = 0x1F
    TagSetType                Tag = 0x20
    TagSubrangeType           Tag = 0x21
    TagWithStmt               Tag = 0x22
    TagAccessDeclaration      Tag = 0x23
    TagBaseType               Tag = 0x24
    TagCatchDwarfBlock        Tag = 0x25
    TagConstType              Tag = 0x26
    TagConstant               Tag = 0x27
    TagEnumerator             Tag = 0x28
    TagFileType               Tag = 0x29
    TagFriend                 Tag = 0x2A
    TagNamelist               Tag = 0x2B
    TagNamelistItem           Tag = 0x2C
    TagPackedType             Tag = 0x2D
    TagSubprogram             Tag = 0x2E
    TagTemplateTypeParameter  Tag = 0x2F
    TagTemplateValueParameter Tag = 0x30
    TagThrownType             Tag = 0x31
    TagTryDwarfBlock          Tag = 0x32
    TagVariantPart            Tag = 0x33
    TagVariable               Tag = 0x34
    TagVolatileType           Tag = 0x35
    TagDwarfProcedure         Tag = 0x36
    TagRestrictType           Tag = 0x37
    TagInterfaceType          Tag = 0x38
    TagNamespace              Tag = 0x39
    TagImportedModule         Tag = 0x3A
    TagUnspecifiedType        Tag = 0x3B
    TagPartialUnit            Tag = 0x3C
    TagImportedUnit           Tag = 0x3D
    TagMutableType            Tag = 0x3E
)

(Tag) GoString関数

func (t Tag) GoString() string

(Tag) String関数

func (t Tag) String() string

Type型

Typeは、特定のType構造体(CharType,  StructType等)へのポインタを表します。

type Type interface {
    Common() *CommonType
    String() string
    Size() int64
}

TypedefType型

TypedefTypeは、名前付きの型を表します。

type TypedefType struct {
    CommonType
    Type Type
}

(*TypedefType) Size関数

func (t *TypedefType) Size() int64

(*TypedefType) String関数

func (t *TypedefType) String() string

UcharType型

UcharTypeは、符号無し文字型を表します。

type UcharType struct {
    BasicType
}

UintType型

UintTypeは、符号無し整数型を表します。

type UintType struct {
    BasicType
}

VoidType型

VoidTypeは、C言語のvoid型を表します。

type VoidType struct {
    CommonType
}

(*VoidType) String関数

func (t *VoidType) String() string