mirror of
https://github.com/beego/bee.git
synced 2024-11-29 22:01:28 +00:00
85 lines
2.2 KiB
Go
85 lines
2.2 KiB
Go
|
package target
|
||
|
|
||
|
import (
|
||
|
"debug/gosym"
|
||
|
"go/ast"
|
||
|
"time"
|
||
|
|
||
|
"github.com/derekparker/delve/pkg/proc"
|
||
|
)
|
||
|
|
||
|
// Target represents the target of the debugger. This
|
||
|
// target could be a system process, core file, etc.
|
||
|
type Interface interface {
|
||
|
Info
|
||
|
ProcessManipulation
|
||
|
BreakpointManipulation
|
||
|
VariableEval
|
||
|
}
|
||
|
|
||
|
// Info is an interface that provides general information on the target.
|
||
|
type Info interface {
|
||
|
Pid() int
|
||
|
Exited() bool
|
||
|
Running() bool
|
||
|
|
||
|
BinaryInfo
|
||
|
ThreadInfo
|
||
|
GoroutineInfo
|
||
|
}
|
||
|
|
||
|
// BinaryInfo is an interface for accessing information on the binary file
|
||
|
// and the contents of binary sections.
|
||
|
type BinaryInfo interface {
|
||
|
LastModified() time.Time
|
||
|
Sources() map[string]*gosym.Obj
|
||
|
FindFileLocation(fileName string, lineNumber int) (uint64, error)
|
||
|
FindFunctionLocation(funcName string, firstLine bool, lineOffset int) (uint64, error)
|
||
|
Funcs() []gosym.Func
|
||
|
Types() ([]string, error)
|
||
|
PCToLine(uint64) (string, int, *gosym.Func)
|
||
|
FirstPCAfterPrologue(fn *gosym.Func, sameline bool) (uint64, error)
|
||
|
}
|
||
|
|
||
|
// ThreadInfo is an interface for getting information on active threads
|
||
|
// in the process.
|
||
|
type ThreadInfo interface {
|
||
|
Threads() map[int]*proc.Thread
|
||
|
CurrentThread() *proc.Thread
|
||
|
}
|
||
|
|
||
|
// GoroutineInfo is an interface for getting information on running goroutines.
|
||
|
type GoroutineInfo interface {
|
||
|
GoroutinesInfo() ([]*proc.G, error)
|
||
|
SelectedGoroutine() *proc.G
|
||
|
FindGoroutine(int) (*proc.G, error)
|
||
|
}
|
||
|
|
||
|
// ProcessManipulation is an interface for changing the execution state of a process.
|
||
|
type ProcessManipulation interface {
|
||
|
Continue() error
|
||
|
Next() error
|
||
|
Step() error
|
||
|
StepOut() error
|
||
|
StepInstruction() error
|
||
|
SwitchThread(int) error
|
||
|
SwitchGoroutine(int) error
|
||
|
RequestManualStop() error
|
||
|
Halt() error
|
||
|
Kill() error
|
||
|
Detach(bool) error
|
||
|
}
|
||
|
|
||
|
// BreakpointManipulation is an interface for managing breakpoints.
|
||
|
type BreakpointManipulation interface {
|
||
|
Breakpoints() map[uint64]*proc.Breakpoint
|
||
|
SetBreakpoint(addr uint64, kind proc.BreakpointKind, cond ast.Expr) (*proc.Breakpoint, error)
|
||
|
ClearBreakpoint(addr uint64) (*proc.Breakpoint, error)
|
||
|
ClearInternalBreakpoints() error
|
||
|
}
|
||
|
|
||
|
// VariableEval is an interface for dealing with eval scopes.
|
||
|
type VariableEval interface {
|
||
|
ConvertEvalScope(gid, frame int) (*proc.EvalScope, error)
|
||
|
}
|