debugger: check that target is valid when detaching (#2263)
Do not call detach if the target is no longer valid. Fixes #2259 Co-authored-by: a <a@kra>
This commit is contained in:
parent
24ec1754b2
commit
d61bf018f0
@ -407,7 +407,9 @@ func (d *Debugger) FunctionReturnLocations(fnName string) ([]uint64, error) {
|
||||
func (d *Debugger) Detach(kill bool) error {
|
||||
d.targetMutex.Lock()
|
||||
defer d.targetMutex.Unlock()
|
||||
|
||||
if ok, _ := d.target.Valid(); !ok {
|
||||
return nil
|
||||
}
|
||||
return d.detach(kill)
|
||||
}
|
||||
|
||||
|
@ -9,6 +9,7 @@ import (
|
||||
"net/rpc"
|
||||
"net/rpc/jsonrpc"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"runtime"
|
||||
@ -2111,3 +2112,55 @@ func TestIssue2162(t *testing.T) {
|
||||
assertNoError(err, t, "Step()")
|
||||
})
|
||||
}
|
||||
|
||||
func TestDetachLeaveRunning(t *testing.T) {
|
||||
// See https://github.com/go-delve/delve/issues/2259
|
||||
if testBackend == "rr" {
|
||||
return
|
||||
}
|
||||
|
||||
listener, clientConn := service.ListenerPipe()
|
||||
defer listener.Close()
|
||||
var buildFlags protest.BuildFlags
|
||||
if buildMode == "pie" {
|
||||
buildFlags |= protest.BuildModePIE
|
||||
}
|
||||
fixture := protest.BuildFixture("testnextnethttp", buildFlags)
|
||||
|
||||
cmd := exec.Command(fixture.Path)
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
assertNoError(cmd.Start(), t, "starting fixture")
|
||||
defer cmd.Process.Kill()
|
||||
|
||||
// wait for testnextnethttp to start listening
|
||||
t0 := time.Now()
|
||||
for {
|
||||
conn, err := net.Dial("tcp", "127.0.0.1:9191")
|
||||
if err == nil {
|
||||
conn.Close()
|
||||
break
|
||||
}
|
||||
time.Sleep(50 * time.Millisecond)
|
||||
if time.Since(t0) > 10*time.Second {
|
||||
t.Fatal("fixture did not start")
|
||||
}
|
||||
}
|
||||
|
||||
server := rpccommon.NewServer(&service.Config{
|
||||
Listener: listener,
|
||||
APIVersion: 2,
|
||||
Debugger: debugger.Config{
|
||||
AttachPid: cmd.Process.Pid,
|
||||
WorkingDir: ".",
|
||||
Backend: testBackend,
|
||||
},
|
||||
})
|
||||
if err := server.Run(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
client := rpc2.NewClientFromConn(clientConn)
|
||||
defer server.Stop()
|
||||
assertNoError(client.Detach(false), t, "Detach")
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user