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
非常感謝!
我不認爲它會有所作爲,但是如果你使用gdb命令'run'而不是'start',會發生什麼? –
@NathanErnst:使用「運行」命令後,程序成功退出。 –
不熟悉'start'命令,我會建議看看'start'和'run'之間的gdb環境差異。 –