Repository navigation
Expand file tree
/
Copy pathdebug.go
More file actions
71 lines (58 loc) · 2.22 KB
/
Copy pathdebug.go
File metadata and controls
71 lines (58 loc) · 2.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//go:build darwin && debug
// +build darwin,debug
package vz
import (
"fmt"
"runtime"
"unsafe"
"github.com/Code-Hex/vz/v4/internal/objc"
"github.com/Code-Hex/vz/v4/internal/vzbridge"
)
// DebugStubConfiguration is an interface to debug configuration.
type DebugStubConfiguration interface {
objc.NSObject
debugStubConfiguration()
}
type baseDebugStubConfiguration struct{}
func (*baseDebugStubConfiguration) debugStubConfiguration() {}
// GDBDebugStubConfiguration is a configuration for gdb debugging.
type GDBDebugStubConfiguration struct {
*pointer
*baseDebugStubConfiguration
}
var _ DebugStubConfiguration = (*GDBDebugStubConfiguration)(nil)
// NewGDBDebugStubConfiguration creates a new GDB debug confiuration.
//
// This API is not officially published and is subject to change without notice.
//
// This is only supported on macOS 11 and newer, error will
// be returned on older versions.
func NewGDBDebugStubConfiguration(port uint32) (*GDBDebugStubConfiguration, error) {
if err := macOSAvailable(11); err != nil {
return nil, err
}
allocation := vzbridge.UnsafePrivateAllocate("_VZGDBDebugStubConfiguration")
if allocation == nil {
return nil, fmt.Errorf("private GDB debug configuration is unavailable")
}
var invoked bool
raw := vzbridge.UnsafePrivate__VZGDBDebugStubConfiguration_Instance_initWithPort__be82df9e(allocation, uint16(port), false, unsafe.Pointer(&invoked))
// An initializer consumes its receiver even when it returns nil.
if !invoked {
vzbridge.ReleaseObject(allocation)
return nil, fmt.Errorf("private GDB debug initializer is unavailable")
}
object := objc.NewManagedPointer(raw, vzbridge.ReleaseObject)
if object == nil {
return nil, fmt.Errorf("private GDB debug configuration is unavailable")
}
return &GDBDebugStubConfiguration{pointer: object}, nil
}
// SetDebugStubVirtualMachineConfiguration sets debug stub configuration. Empty by default.
//
// This API is not officially published and is subject to change without notice.
func (v *VirtualMachineConfiguration) SetDebugStubVirtualMachineConfiguration(dc DebugStubConfiguration) {
vzbridge.UnsafePrivate_VZVirtualMachineConfiguration_Instance__setDebugStub__cc718b50(objc.Ptr(v), objc.Ptr(dc))
runtime.KeepAlive(v)
runtime.KeepAlive(dc)
}