首页 文章

为什么gdb输出致命错误?

提问于
浏览
2

我正在研究使用gdb来调试Go程序 . Go版本是1.2,并在linux / amd64上运行 .

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

首先十分感谢!

1 回答

相关问题