conversions.go 1.7 KB
Newer Older
1 2
package api

A
aarzilli 已提交
3 4 5 6
import (
	"debug/gosym"
	"github.com/derekparker/delve/proc"
)
7 8 9 10 11 12 13 14 15

// convertBreakpoint converts an internal breakpoint to an API Breakpoint.
func ConvertBreakpoint(bp *proc.Breakpoint) *Breakpoint {
	return &Breakpoint{
		ID:           bp.ID,
		FunctionName: bp.FunctionName,
		File:         bp.File,
		Line:         bp.Line,
		Addr:         bp.Addr,
A
aarzilli 已提交
16 17 18 19
		Tracepoint:   bp.Tracepoint,
		Stacktrace:   bp.Stacktrace,
		Goroutine:    bp.Goroutine,
		Symbols:      bp.Symbols,
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
	}
}

// convertThread converts an internal thread to an API Thread.
func ConvertThread(th *proc.Thread) *Thread {
	var (
		function *Function
		file     string
		line     int
		pc       uint64
	)

	loc, err := th.Location()
	if err == nil {
		pc = loc.PC
		file = loc.File
		line = loc.Line
A
aarzilli 已提交
37
		function = ConvertFunction(loc.Fn)
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
	}

	return &Thread{
		ID:       th.Id,
		PC:       pc,
		File:     file,
		Line:     line,
		Function: function,
	}
}

// convertVar converts an internal variable to an API Variable.
func ConvertVar(v *proc.Variable) Variable {
	return Variable{
		Name:  v.Name,
		Value: v.Value,
		Type:  v.Type,
	}
}

A
aarzilli 已提交
58 59 60 61 62 63 64 65 66 67
func ConvertFunction(fn *gosym.Func) *Function {
	if fn == nil {
		return nil
	}

	return &Function{
		Name:   fn.Name,
		Type:   fn.Type,
		Value:  fn.Value,
		GoType: fn.GoType,
68
	}
A
aarzilli 已提交
69
}
70

A
aarzilli 已提交
71 72
// convertGoroutine converts an internal Goroutine to an API Goroutine.
func ConvertGoroutine(g *proc.G) *Goroutine {
73 74 75 76 77
	return &Goroutine{
		ID:       g.Id,
		PC:       g.PC,
		File:     g.File,
		Line:     g.Line,
A
aarzilli 已提交
78 79 80 81 82 83 84 85 86 87
		Function: ConvertFunction(g.Func),
	}
}

func ConvertLocation(loc proc.Location) Location {
	return Location{
		PC:       loc.PC,
		File:     loc.File,
		Line:     loc.Line,
		Function: ConvertFunction(loc.Fn),
88 89
	}
}