为什么gdb输出致命错误?

我正在学习使用 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  

首先十分感谢!


有只小跳蛙
浏览 256回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go