mirror of
https://github.com/go-delve/delve.git
synced 2025-11-01 20:20:40 +08:00
proc: changed windows backend to deal with simultaneous breakpoints (#598)
* proc: changed windows backend to deal with simultaneous breakpoints * bugfix: forgot to add windowsPrologue3 to the prologues list in e4c7df1 * Tolerate errors returned by Stacktrace in TestStacktraceGoroutine. * bugfix: proc: propagate debug events we don't cause back to the target process Fixes: #594 * proc: fixed TestStepConcurrentPtr Implementation of nextInProgress was wrong.
This commit is contained in:
committed by
Derek Parker
parent
46803551b8
commit
f6e8fb37a4
@ -801,7 +801,10 @@ func TestStacktraceGoroutine(t *testing.T) {
|
||||
|
||||
for i, g := range gs {
|
||||
locations, err := g.Stacktrace(40)
|
||||
assertNoError(err, t, "GoroutineStacktrace()")
|
||||
if err != nil {
|
||||
// On windows we do not have frame information for goroutines doing system calls.
|
||||
continue
|
||||
}
|
||||
|
||||
if stackMatch(mainStack, locations, false) {
|
||||
mainCount++
|
||||
@ -2084,8 +2087,8 @@ func TestStepConcurrentDirect(t *testing.T) {
|
||||
}
|
||||
|
||||
func nextInProgress(p *Process) bool {
|
||||
for _, th := range p.Threads {
|
||||
if th.CurrentBreakpoint != nil && th.CurrentBreakpoint.Internal() {
|
||||
for _, bp := range p.Breakpoints {
|
||||
if bp.Internal() {
|
||||
return true
|
||||
}
|
||||
}
|
||||
@ -2135,13 +2138,13 @@ func TestStepConcurrentPtr(t *testing.T) {
|
||||
assertNoError(p.Continue(), t, "Continue()")
|
||||
}
|
||||
|
||||
f, ln = currentLineNumber(p, t)
|
||||
if ln != 13 {
|
||||
t.Fatalf("Step did not step into function call (13): %s:%d (gid: %d)", f, ln, p.SelectedGoroutine.ID)
|
||||
if p.SelectedGoroutine.ID != gid {
|
||||
t.Fatalf("Step switched goroutines (wanted: %d got: %d)", gid, p.SelectedGoroutine.ID)
|
||||
}
|
||||
|
||||
if p.SelectedGoroutine.ID != gid {
|
||||
t.Fatalf("Step switched goroutines (%d %d)", gid, p.SelectedGoroutine.ID)
|
||||
f, ln = currentLineNumber(p, t)
|
||||
if ln != 13 {
|
||||
t.Fatalf("Step did not step into function call (13): %s:%d", f, ln)
|
||||
}
|
||||
|
||||
count++
|
||||
@ -2197,3 +2200,17 @@ func TestStepOnCallPtrInstr(t *testing.T) {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestIssue594(t *testing.T) {
|
||||
// Exceptions that aren't caused by breakpoints should be propagated
|
||||
// back to the target.
|
||||
// In particular the target should be able to cause a nil pointer
|
||||
// dereference panic and recover from it.
|
||||
withTestProcess("issue594", t, func(p *Process, fixture protest.Fixture) {
|
||||
assertNoError(p.Continue(), t, "Continue()")
|
||||
f, ln := currentLineNumber(p, t)
|
||||
if ln != 21 {
|
||||
t.Fatalf("Program stopped at %s:%d, expected :21", f, ln)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user