2014-01-24 91 views
2

我正在學習使用gdb來調試Go程序。 Go版本是1.2,並且在linux/amd64上運行。爲什麼gdb輸出致命錯誤?

的圍棋程序是非常簡單的:

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:使用「運行」命令後,程序成功退出。 –

+0

不熟悉'start'命令,我會建議看看'start'和'run'之間的gdb環境差異。 –

回答

相關問題