Handle missing line info in printcontext

This commit is contained in:
Michael Gehring
2014-11-13 12:04:47 +01:00
committed by Derek Parker
parent 03b5e30bfb
commit 2ce51ab92f

View File

@ -239,40 +239,45 @@ func printcontext(p *proctl.DebuggedProcess) error {
return err return err
} }
f, l, _ := p.GoSymTable.PCToLine(regs.PC()) f, l, fn := p.GoSymTable.PCToLine(regs.PC())
fmt.Printf("Stopped at: %s:%d\n", f, l) if fn != nil {
file, err := os.Open(f) fmt.Printf("Stopped at: %s:%d\n", f, l)
if err != nil { file, err := os.Open(f)
return err if err != nil {
}
defer file.Close()
buf := bufio.NewReader(file)
for i := 1; i < l-5; i++ {
_, err := buf.ReadString('\n')
if err != nil && err != io.EOF {
return err return err
} }
} defer file.Close()
for i := l - 5; i <= l+5; i++ { buf := bufio.NewReader(file)
line, err := buf.ReadString('\n') for i := 1; i < l-5; i++ {
if err != nil { _, err := buf.ReadString('\n')
if err != io.EOF { if err != nil && err != io.EOF {
return err return err
} }
}
if err == io.EOF { for i := l - 5; i <= l+5; i++ {
break line, err := buf.ReadString('\n')
if err != nil {
if err != io.EOF {
return err
}
if err == io.EOF {
break
}
} }
}
if i == l { if i == l {
line = "\033[34m=>\033[0m" + line line = "\033[34m=>\033[0m" + line
} }
context = append(context, fmt.Sprintf("\033[34m%d\033[0m: %s", i, line)) context = append(context, fmt.Sprintf("\033[34m%d\033[0m: %s", i, line))
}
} else {
fmt.Printf("Stopped at: 0x%x\n", regs.PC())
context = append(context, "\033[34m=>\033[0m no source available")
} }
fmt.Println(strings.Join(context, "")) fmt.Println(strings.Join(context, ""))