@@ -9,12 +9,10 @@ package debugdetect
99#cgo LDFLAGS: -lutil
1010*/
1111import "C"
12+
1213import (
13- "bufio"
1414 "fmt"
1515 "os"
16- "strconv"
17- "strings"
1816 "unsafe"
1917)
2018
@@ -24,62 +22,11 @@ const (
2422)
2523
2624func detectDebuggerAttached () (bool , error ) {
27- // Try sysctl first (more reliable)
28- attached , err := detectFreeBSDSysctl ()
29- if err == nil {
30- return attached , nil
31- }
32-
33- // Fall back to procfs if available
34- attachedProcfs , errProcfs := detectFreeBSDProcfs ()
35- if errProcfs == nil {
36- return attachedProcfs , nil
37- }
38-
39- // Both methods failed
40- return false , fmt .Errorf ("sysctl failed: %v; procfs fallback failed: %v" , err , errProcfs )
41- }
42-
43- func detectFreeBSDSysctl () (bool , error ) {
44- // Use kinfo_getproc to get process information
4525 kp , err := C .kinfo_getproc (C .int (os .Getpid ()))
4626 if err != nil {
4727 return false , fmt .Errorf ("kinfo_getproc failed: %v" , err )
4828 }
4929 defer C .free (unsafe .Pointer (kp ))
5030
51- // Check if P_TRACED flag is set in ki_flag
52- // ki_flag contains the process flags including P_TRACED
5331 return (int (kp .ki_flag ) & pTracedFlag ) != 0 , nil
5432}
55-
56- func detectFreeBSDProcfs () (bool , error ) {
57- // Try reading /proc/curproc/status (similar to Linux)
58- f , err := os .Open ("/proc/curproc/status" )
59- if err != nil {
60- return false , fmt .Errorf ("failed to read /proc/curproc/status: %w" , err )
61- }
62- defer f .Close ()
63-
64- scanner := bufio .NewScanner (f )
65- for scanner .Scan () {
66- line := scanner .Text ()
67- if strings .HasPrefix (line , "TracerPid:" ) {
68- fields := strings .Fields (line )
69- if len (fields ) < 2 {
70- return false , fmt .Errorf ("malformed TracerPid line: %s" , line )
71- }
72- pid , err := strconv .Atoi (fields [1 ])
73- if err != nil {
74- return false , fmt .Errorf ("failed to parse TracerPid: %w" , err )
75- }
76- return pid != 0 , nil
77- }
78- }
79-
80- if err := scanner .Err (); err != nil {
81- return false , fmt .Errorf ("error reading /proc/curproc/status: %w" , err )
82- }
83-
84- return false , fmt .Errorf ("TracerPid not found in /proc/curproc/status" )
85- }
0 commit comments