import "debug/proc"

procパッケージは、プラットフォームに依存しない実行中プロセスのトレースや制御を行うためのインタフェースを提供します。マルチスレッドをサポートし、ブレークポイント、シングルステップ実行、メモリやレジスタの操作等の基本的なデバッグ制御を提供します。

パッケージファイル

proc.go proc_darwin.go proc_freebsd.go proc_linux.go proc_nacl.go proc_windows.go regs_darwin_386.go regs_darwin_amd64.go regs_freebsd_386.go regs_freebsd_amd64.go regs_linux_386.go regs_linux_amd64.go regs_linux_arm.go regs_nacl_386.go regs_windows_386.go regs_windows_amd64.go

Breakpoint型

Breakpointは、設定したブレークポイントに達したスレッドから生じた停止理由を表します。

type Breakpoint Word

(Breakpoint) PC関数

func (c Breakpoint) PC() Word

PCは、停止した箇所のプログラムカウンタを返します。

(Breakpoint) String関数

func (c Breakpoint) String() string

Cause型

Causeは、スレッド停止理由を表します。

type Cause interface {
    String() string
}

Process型

Processは、トレースされているプロセスで、プロセスはスレッドの集合です。プロセスは実行、停止、終了を行うことが可能です。プロセスの状態は内部の全スレッドに影響します。

type Process interface {
    // プロセス内の全スレッドの配列を返します。
    Threads() []Thread

    // プログラムカウンタpcに新しいブレークポイントを作成します。
    // プロセスが停止している場合にのみブレークポイントを作成することができます。
    // 指定されたpcの位置に既にブレークポイントが存在する場合はエラーとなります。
    AddBreakpoint(pc Word) os.Error

    // プログラムカウンタpcのブレークポイントを削除します。
    // 指定されたpcの位置にブレークポイントが存在しない場合はエラーとなります。
    RemoveBreakpoint(pc Word) os.Error

    // プロセス内の全実行スレッドを停止します。
    Stop() os.Error

    // プロセス内の全スレッドの実行を再開します。
    // ブレークポイントにて停止しているスレッドはステップオーバーします。
    // スレッドがSIGSTOP、またはSIGTRAP以外のシグナルで停止している場合は
    // ペンディングシグナルを受信します。
    Continue() os.Error

    // プロセスp内の全スレッドにてブレークポイントでの停止、シグナルの受信、
    // スレッドの作成・終了が全て完了するまで待ちます。
    WaitStop() os.Error

    // プロセスからデタッチします。
    // 全停止スレッドが再開されます。
    Detach() os.Error
}

Attach関数

func Attach(pid int) (Process, os.Error)

Attachは、プロセスpidへアタッチし、その全てのスレッドを停止します。

ForkExec関数

func ForkExec(argv0 string, argv []string, envv []string, dir string, fd []*os.File) (Process, os.Error)

ForkExecは、カレントプロセスをフォークしargv0を実行して、execシステムコールの後に新しいプロセスを停止します。(詳細はos.ForkExec参照)

ProcessExited型

type ProcessExited struct{}

(ProcessExited) String関数

func (p ProcessExited) String() string

Regs型

Regsは、プログラムカウンタ、リンクレジスタ、スタックポインタを含む名前付きマシンレジスタのセットです。

type Regs interface {
    // プログラムカウンタの値を返します。
    PC() Word

    // valへプログラムカウンタへ設定します。
    SetPC(val Word) os.Error

    // リンクレジスタを返します。
    Link() Word

    // valへリンクレジスタを設定します。
    SetLink(val Word) os.Error

    // スタックポインタの値を返します。
    SP() Word

    // valへスタックポインタを設定します。
    SetSP(val Word) os.Error

    // 全レジスタの名前を返します。
    Names() []string

    // Namesによって返される配列よりインデックスiに該当するレジスタの値を
    // 返します。
    Get(i int) Word

    // レジスタの値を設定します。
    Set(i int, val Word) os.Error
}

Signal型

Signalは、シグナルを受信したスレッドの停止理由を表します。プロセスが継続されるとシグナルが配信されます。

type Signal string

(Signal) Name関数

func (c Signal) Name() string

Nameは、スレッドへ配信するシグナルを返します。

(Signal) String関数

func (c Signal) String() string

Stopped型

Stoppedは、ユーザによるリクエスト(例えば、Stopメソッドの呼び出し、またはシングルステップ実行後)により停止したスレッド、またはプログラムにより停止したスレッドの停止理由を表します。

type Stopped struct{}

(Stopped) String関数

func (c Stopped) String() string

Thread型

Threadは、プロセス内のスレッドをトレースします。

type Thread interface {
    // 1命令によりスレッドをステップします。
    // スレッドは停止している必要があり、ブレークポイントで停止している場合は
    // ステップオーバーします。
    Step() os.Error

    // スレッドが停止している理由を返します。
    // (スレッドが停止していない場合はエラーとなります。)
    Stopped() (Cause, os.Error)

    // スレッドからカレントレジスタ値を取得します。
    // (スレッドは停止している必要があります。)
    Regs() (Regs, os.Error)

    // 指定されたアドレスaddrよりスレッドからoutのバイト数分読み込み、
    // 読み込みに成功したバイト数を返します。
    // 割り当てられていないメモリを読み込む等でエラーが発生した場合は
    // エラーが返され、読み込み可能なところまでを返します。
    // (スレッドは停止している必要があります。)
    Peek(addr Word, out []byte) (int, os.Error)

    // スレッドのアドレスaddrへbを書き込みます。
    // (スレッドは停止している必要があります。)
    // 書き込みに成功したバイト数を返し、割り当てられていないメモリへ
    // 書き込む等でエラーが発生した場合はエラーが返され、書き込み可能
    // なところまでを返します。
    Poke(addr Word, b []byte) (int, os.Error)
}

ThreadCreate型

ThreadCreateは、新しいスレッドを作成する際に既存のスレッドから返される停止理由を表します。このとき新しいスレッドは初期状態で、プロセスが再開したときに実行が開始されます。

type ThreadCreate struct {
    // contains unexported fields
}

(*ThreadCreate) NewThread関数

func (c *ThreadCreate) NewThread() Thread

(*ThreadCreate) String関数

func (c *ThreadCreate) String() string

ThreadExit型

ThreadExitは、スレッドの終了で発生した停止理由を表します。これが最初に発生したときは、スレッドはまだプロセスリストに存在しており、レジスタやメモリにアクセスすることができます。

type ThreadExit struct {
    // contains unexported fields
}

(*ThreadExit) ExitStatus関数

func (c *ThreadExit) ExitStatus() int

ExitStatusは、スレッドの終了ステータスを返します。異常終了時は-1を返します。

(*ThreadExit) Exited関数

func (c *ThreadExit) Exited() bool

Exitedは、スレッドが正常終了した場合にtrueを返します。

(*ThreadExit) Signaled関数

func (c *ThreadExit) Signaled() bool

Signaledは、スレッドがシグナルによって終了した場合にtrueを返します。

(*ThreadExit) StopSignal関数

func (c *ThreadExit) StopSignal() string

StopSignalは、スレッドがシグナルによって終了した場合は該当するシグナルを返し、それ以外の場合は空文字列を返します。

(*ThreadExit) String関数

func (c *ThreadExit) String() string

Word型

type Word uint64