2014-01-24 4 views
2

Я изучаю, чтобы использовать gdb для отладки программы Go. Версия Go - 1,2 и работает на linux/amd64.Почему gdb выводит фатальную ошибку?

программа

The Go очень просто:

package main 
import "fmt" 
func main(){ 
    fmt.Printf("hello, world\n"); 
} 

При использовании GDB для отладки это, выход GDB является

$ gdb hello 
GNU gdb (GDB) 7.6 
Copyright (C) 2013 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. 
This GDB was configured as "x86_64-unknown-linux-gnu". 
For bug reporting instructions, please see: 
<http://www.gnu.org/software/gdb/bugs/>... 
Reading symbols from /data2/home/nanxiao/hello...done. 
Loading Go Runtime support. 
(gdb) start 
Temporary breakpoint 1 at 0x400c00: file /data2/home/nanxiao/hello.go, line 3. 
Starting program: /data2/home/nanxiao/hello 

Temporary breakpoint 1, main.main() at /data2/home/nanxiao/hello.go:3 
3  func main(){ 
(gdb) n 
runtime: pc=0x400c13 0xcc 0xeb 0x48 0x83 0xec 
fatal error: runtime: misuse of rewindmorestack 

runtime stack: 
runtime.throw(0x56325f) 
    /data2/soft/go/src/pkg/runtime/panic.c:464 +0x69 
runtime.rewindmorestack(0xc210001148) 
    /data2/soft/go/src/pkg/runtime/sys_x86.c:41 +0xb4 
runtime.newstack() 
    /data2/soft/go/src/pkg/runtime/stack.c:230 +0x153 
runtime.morestack() 
    /data2/soft/go/src/pkg/runtime/asm_amd64.s:225 +0x61 

За мое понимание, после выполнения команды "N", то GDB должен выйти следующий оператор, а выход:

fmt.Printf("hello, world\n"); 

Зачем возникает следующая «фатальная ошибка»?

runtime: pc=0x400c13 0xcc 0xeb 0x48 0x83 0xec 
fatal error: runtime: misuse of rewindmorestack 

Большое спасибо!

+0

Я не думаю, что это изменит ситуацию, но что произойдет, если вы используете команду gdb 'run' вместо' start'? –

+0

@NathanErnst: после использования команды «run» программа успешно завершает работу. –

+0

Не знакомы с командой 'start', поэтому я бы предложил изучить различия в среде gdb между' start' и 'run'. –

ответ

3

Это была проблема с версией 1.2. Это исправлено в версии 1.2.1, вы можете скачать его с: https://code.google.com/p/go/downloads/list

+0

отчет об ошибке: https://code.google.com/p/go/issues/detail?id=6776 – nos

Смежные вопросы