import "exp/ogle"

Ogleは初期段階のGo言語デバッガです。

パッケージファイル

abort.go arch.go cmd.go event.go frame.go goroutine.go process.go rruntime.go rtype.go rvalue.go vars.go

変数

var Amd64 = &amd64{gReg: -1}

Main関数

func Main()

Arch型

type Arch interface {
    // ToWordは、最大8バイトの配列をWordにメモリ順で変換します。
    ToWord(data []byte) proc.Word
    // FromWordは、Wordを最大8バイトの配列にメモリ順で変換します。
    FromWord(v proc.Word, out []byte)
    // ToFloat32は、Wordをfloatに変換します。このWordの順序は、
    // floatのメモリ上表現をToWordが返すときの順番で、
    // 反転が必要となる場合があります。
    ToFloat32(bits uint32) float32
    // FromFloat32は、floatをWordに変換します。
    // この関数は、floatのアーキテクチャ上のメモリ表現を取得し、
    // FromWordに渡すことが可能なwordを返さなければなりません。
    FromFloat32(f float32) uint32
    // ToFloat64は、ToFloat32がfloat32に変換するのと同様にfloat64に変換します。
    ToFloat64(bits uint64) float64
    // FromFloat64は、FromFloat32がfloat32に変換するのと同様にfloat64に変換します。
    FromFloat64(f float64) uint64

    // IntSizeは、'int'のバイト数を返します。
    IntSize() int
    // PtrSizeは、'uintptr'のバイト数を返します。
    PtrSize() int
    // FloatSizeは、'float'のバイト数を返します。
    FloatSize() int
    // Alignは、指定したサイズを持つ基本型の適切なオフセットへ、
    // offsetの値をラウンドアップします。
    Align(offset, width int) int

    // Gは、カレントのGポインタを返します。
    G(regs proc.Regs) proc.Word

    // ClosureSizeは、ParseClosureが必要とするバイト数を返します。
    ClosureSize() int
    // ParseClosureは、リモートプロセス内のPCから読み込んだ
    // ClosureSizeバイト数を受け取り、このコードがクロージャであるか調べ、
    // クロージャであれば、そのクロージャのフレームサイズを返します。
    ParseClosure(data []byte) (frame int, ok bool)
}

ArchAlignedMultiple型

type ArchAlignedMultiple struct{}

(ArchAlignedMultiple) Align関数

func (ArchAlignedMultiple) Align(offset, width int) int

ArchLSB型

type ArchLSB struct{}

(ArchLSB) FromFloat32関数

func (ArchLSB) FromFloat32(f float32) uint32

(ArchLSB) FromFloat64関数

func (ArchLSB) FromFloat64(f float64) uint64

(ArchLSB) FromWord関数

func (ArchLSB) FromWord(v proc.Word, out []byte)

(ArchLSB) ToFloat32関数

func (ArchLSB) ToFloat32(bits uint32) float32

(ArchLSB) ToFloat64関数

func (ArchLSB) ToFloat64(bits uint64) float64

(ArchLSB) ToWord関数

func (ArchLSB) ToWord(data []byte) proc.Word

Breakpoint型

Breakpointイベントは、プロセスが特定のプログラムカウンタに達したときに発生します。このイベントがハンドリングされているときは、そのプログラムカウンタが到達したゴルーチンが、カレントのゴルーチンになります。

type Breakpoint struct {
    // contains unexported fields
}

(*Breakpoint) PC関数

func (b *Breakpoint) PC() proc.Word

(*Breakpoint) String関数

func (b *Breakpoint) String() string

Event型

type Event interface {
    Process() *Process
    Goroutine() *Goroutine
    String() string
}

EventAction型

EventActionは、イベントに対するイベントハンドラからの応答です。すべてのイベントハンドラが実行エラーなしで実行されたとき、結果は次のようになります。ハンドラのどれかがEAContinueを返すときは、プロセスは再開(WaitStopからは、復帰しません)します。ハンドラがEAStopを返すときは、プロセスは停止したままです。ハンドラがEADefaultを返すときは、プロセスは再開されます。ハンドラがEARemoveSelfを返すときは、ビット指定で他のどのアクションのハンドラがフックから取り除かれなければならないかを示します。

type EventAction int
const (
    EARemoveSelf EventAction = 0x100
    EADefault    EventAction = iota
    EAStop
    EAContinue
)

EventPrint関数

func EventPrint(ev Event) (EventAction, os.Error)

EventPrintは、発生したイベントを出力する、標準イベントハンドラです。これはプロセスの停止要因とはなりません。

EventStop関数

func EventStop(ev Event) (EventAction, os.Error)

EventStopは、プロセス停止要因となる標準イベントハンドラです。

EventHandler型

EventHandlerは、イベントを引数にとり、そのイベントの応答と、エラーを返す関数です。このイベントハンドラがエラーを返すときは、プロセスは停止しており、かつこのイベントの他のハンドラは実行されていません。

type EventHandler func(e Event) (EventAction, os.Error)

EventHook型

EventHookは、イベントハンドラの追加、削除を可能にします。

type EventHook interface {
    AddHandler(EventHandler)
    RemoveHandler(EventHandler)
    NumHandler() int

    String() string
    // contains unexported methods
}

FormatError型

FormatErrorは、オブジェクトファイル、またはランタイム構造内の情報が不正か、もしくは不足により、リモートプロセス内、もしくはリモートプロセスの情報取得に失敗したことを示します。

type FormatError string

(FormatError) String関数

func (e FormatError) String() string

Frame型

Frameは、リモートコールスタック上のフレームひとつを表します。

type Frame struct {
    // contains unexported fields
}

(*Frame) Inner関数

func (f *Frame) Inner() *Frame

Innerは、このフレームから呼び出されているフレームを返します。これが最も内側のフレームのときはnilを返します。

(*Frame) Outer関数

func (f *Frame) Outer() (*Frame, os.Error)

Outerは、このフレームを呼び出したフレームを返します。これが最も外側のフレームのときはnilを返します。

(*Frame) String関数

func (f *Frame) String() string

Goroutine型

Goroutineは、リモートプロセスのゴルーチンを表します。

type Goroutine struct {
    // contains unexported fields
}

(*Goroutine) In関数

func (t *Goroutine) In() os.Error

Inは、カレントフレームから呼び出されているフレームを選択します。

(*Goroutine) Out関数

func (t *Goroutine) Out() os.Error

Outは、カレントフレームを呼び出したフレームを選択します。

(*Goroutine) String関数

func (t *Goroutine) String() string

GoroutineCreate型

GoroutineCreateイベントは、プロセスが新しいゴルーチンを作成したときに発生します。このイベントをハンドリングしているときは、新しく作成されたゴルーチンがカレントゴルーチンになります。

type GoroutineCreate struct {
    // contains unexported fields
}

(*GoroutineCreate) Parent関数

func (e *GoroutineCreate) Parent() *Goroutine

Parentは、このゴルーチンを作成したゴルーチンを返します。このイベントが最初のゴルーチンにより作成されているときは、nilが返されます。

(*GoroutineCreate) String関数

func (e *GoroutineCreate) String() string

GoroutineExit型

GoroutineExitイベントは、Goのゴルーチンが終了したときに発生します。

type GoroutineExit struct {
    // contains unexported fields
}

(*GoroutineExit) String関数

func (e *GoroutineExit) String() string

NoCurrentGoroutine型

NoCurrentGoroutineエラーは、選択されたカレントのゴルーチンがプロセス内になかったとき(もしくは、プロセス内にゴルーチンがなかったとき)に発生します。

type NoCurrentGoroutine struct{}

(NoCurrentGoroutine) String関数

func (e NoCurrentGoroutine) String() string

NotOnStack型

NotOnStackエラーは、リモートフレームの変数にアクセスしようとしたときに、そのリモートフレームがカレントスタック上になかったときに発生します。

type NotOnStack struct {
    Fn        *gosym.Func
    Goroutine *Goroutine
}

(NotOnStack) String関数

func (e NotOnStack) String() string

Process型

Processは、アタッチされているリモートプロセスを表します。

type Process struct {
    Arch
    // contains unexported fields
}

NewProcess関数

func NewProcess(tproc proc.Process, arch Arch, syms *gosym.Table) (*Process, os.Error)

NewProcessは、トレース対象のプロセス、アーキテクチャ、シンボルテーブルに基づき、新しいリモートプロセスを構築します。

NewProcessElf関数

func NewProcessElf(tproc proc.Process, f *elf.File) (*Process, os.Error)

NewProcessElfは、トレース対象のプロセスとプロセスのELFオブジェクトに基づき、新しいリモートプロセスを構築します。

(*Process) ContWait関数

func (p *Process) ContWait() os.Error

ContWaitは、プロセスの実行を再開し、プロセスを停止させるイベントが発生するまで待ちます。

(*Process) Event関数

func (p *Process) Event() Event

Eventは、プロセスを停止させたイベントの中で最新のイベントを返します。このプロセスが一度もイベントにより停止されていないときは、nilを返します。

TODO(austin) ユーザが、p.Stop()を呼び出したときは、nilを返すのか?

(*Process) In関数

func (p *Process) In() os.Error

Inは、カレントフレームから呼び出されているフレームを選択します。

(*Process) OnBreakpoint関数

func (p *Process) OnBreakpoint(pc proc.Word) EventHook

OnBreakpointは、プログラムが指定したプログラムカウンタに達したときに実行されるイベントを返します。

(*Process) OnGoroutineCreate関数

func (p *Process) OnGoroutineCreate() EventHook

OnGoroutineCreateは、ゴルーチンが作成されたときに実行されるイベントを返します。

(*Process) OnGoroutineExit関数

func (p *Process) OnGoroutineExit() EventHook

OnGoroutineExitは、ゴルーチンが終了したときに実行されるイベントを返します。

(*Process) Out関数

func (p *Process) Out() os.Error

Outは、カレントフレームを呼び出したフレームを選択します。

(*Process) Peek関数

func (p *Process) Peek(addr proc.Word, out []byte) (int, os.Error)

(*Process) Poke関数

func (p *Process) Poke(addr proc.Word, b []byte) (int, os.Error)

ProcessNotStopped型

ProcessNotStoppedは、停止していないプロセスのメモリまたはレジスタへ読み書きを行おうとしたときに発生します。

type ProcessNotStopped struct{}

(ProcessNotStopped) String関数

func (e ProcessNotStopped) String() string

ReadOnlyError型

ReadOnlyErrorは、読み込み専用である値に、設定または代入しようとしたときに発生します。

type ReadOnlyError string

(ReadOnlyError) String関数

func (e ReadOnlyError) String() string

RemoteMismatchError型

RemoteMismatchErrorは、同一リモートプロセスに行わなくてはならない操作を、異なるプロセスに行ったとき発生します。例えば、あるプロセスのポインタに、他のプロセスのオブジェクトを参照させようとすると発生します。

type RemoteMismatchError string

(RemoteMismatchError) String関数

func (e RemoteMismatchError) String() string

UnknownArchitecture型

UnknownArchitectureは、デバッガでサポートされていないアーキテクチャを指定したオブジェクトファイルをロードしようとしたときに発生します。

type UnknownArchitecture elf.Machine

(UnknownArchitecture) String関数

func (e UnknownArchitecture) String() string

UnknownGoroutine型

UnknownGoroutineエラーは、認識できないG構造体のポインタを表す内部エラーです。

type UnknownGoroutine struct {
    OSThread  proc.Thread
    Goroutine proc.Word
}

(UnknownGoroutine) String関数

func (e UnknownGoroutine) String() string

UsageError型

UsageErrorは、コマンドが不正な引数で呼び出されたときに発生します。

type UsageError string

(UsageError) String関数

func (e UsageError) String() string