import "debug/dwarf"
DWARF 2.0(http://dwarfstd.org/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
Trackback URL
Leave a comment
Comments