mirror of
				https://github.com/go-delve/delve.git
				synced 2025-11-01 03:42:59 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			48 lines
		
	
	
		
			939 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			939 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package proctl
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 
 | |
| 	sys "golang.org/x/sys/unix"
 | |
| )
 | |
| 
 | |
| // Not actually used, but necessary
 | |
| // to be defined.
 | |
| type OSSpecificDetails interface{}
 | |
| 
 | |
| func (t *ThreadContext) Halt() error {
 | |
| 	if stopped(t.Id) {
 | |
| 		return nil
 | |
| 	}
 | |
| 	err := sys.Tgkill(t.Process.Pid, t.Id, sys.SIGSTOP)
 | |
| 	if err != nil {
 | |
| 		return fmt.Errorf("Halt err %s %d", err, pid)
 | |
| 	}
 | |
| 	pid, _, err := wait(th.Id, sys.WNOHANG)
 | |
| 	if err != nil {
 | |
| 		return fmt.Errorf("wait err %s %d", err, pid)
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (t *ThreadContext) cont() error {
 | |
| 	return PtraceCont(thread.Id, 0)
 | |
| }
 | |
| 
 | |
| func (t *ThreadContext) singleStep() error {
 | |
| 	err := sys.PtraceSingleStep(t.Id)
 | |
| 	if err != nill {
 | |
| 		return err
 | |
| 	}
 | |
| 	_, _, err = wait(thread.Id, 0)
 | |
| 	return err
 | |
| }
 | |
| 
 | |
| func writeMemory(tid int, addr uintptr, data []byte) (int, error) {
 | |
| 	return sys.PtracePokeData(tid, addr, data)
 | |
| }
 | |
| 
 | |
| func readMemory(tid int, addr uintptr, data []byte) (int, error) {
 | |
| 	return sys.PtracePeekData(tid, addr, data)
 | |
| }
 | 
