我有一個gdb沒有正確打印變量的問題。 簡單的方案是建立在以下方式:golang gdb - 打印變量
chmurson-osx:helloworld chmurson$ go build -gcflags '-N' start.go
然後GDB執行:
chmurson-osx:helloworld chmurson$ gdb start -d $GOROOT
GNU gdb (GDB) 7.8
Copyright (C) 2014 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-apple-darwin14.0.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from start...done.
warning: Missing auto-load scripts referenced in section .debug_gdb_scripts
of file /Users/chmurson/Dev/goprojects/misc/src/helloworld/start
Use `info auto-load python-scripts [REGEXP]' to list them.
(gdb)
(gdb) source /usr/local/go/src/pkg/runtime/runtime-gdb.py
Loading Go Runtime support.
這是我下一步:
(gdb) list
1 package main
2
3 import "fmt"
4
5 func main() {
6 x := "abc"
7 i := 3
8 fmt.Println(i)
9 fmt.Println(x)
10 }
(gdb) b 9
Breakpoint 1 at 0x2106: file /Users/chmurson/Dev/goprojects/misc/src/helloworld/start.go, line 9.
(gdb) run
Starting program: /Users/chmurson/Dev/goprojects/misc/src/helloworld/start
3
[New Thread 0x1113 of process 14039]
Breakpoint 1, main.main() at /Users/chmurson/Dev/goprojects/misc/src/helloworld/start.go:9
9 fmt.Println(x)
(gdb) p x
Python Exception <type 'exceptions.OverflowError'> signed integer is greater than maximum:
$1 =
(gdb) p i
$2 = 8725692800
(gdb)
你可以看到有一個Python異常在檢查'p'變量時,顯示'i'的值時完全不是3。怎麼了 ?
這是我去的版本
chmurson-osx:helloworld chmurson$ go version
go version go1.3.1 darwin/amd64
和GDB配置
(gdb) show configuration
This GDB was configured as follows:
configure --host=x86_64-apple-darwin14.0.0 --target=x86_64-apple-darwin14.0.0
--with-auto-load-dir=:${prefix}/share/auto-load
--with-auto-load-safe-path=:${prefix}/share/auto-load
--with-expat
--with-gdb-datadir=/usr/local/share/gdb (relocatable)
--with-jit-reader-dir=/usr/local/lib/gdb (relocatable)
--without-libunwind-ia64
--without-lzma
--with-python=/System/Library/Frameworks/Python.framework/Versions/2.7
--without-guile
--with-separate-debug-dir=/usr/local/lib/debug (relocatable)
--with-zlib
--without-babeltrace
("Relocatable" means the directory can be moved with the GDB installation
tree, and GDB will still find it.)
降級轉到1.2.x的確有一招。 Gdb調試器非常漂亮地打印這些變量。另外Go運行時間源自動加載,無需每次都手動插入它們。 Go 1.3並不是必須要求我,因爲我是Go world的新手,所以我很高興。稍後將嘗試查看gccgo的工作方式。謝謝! – chmurson 2014-09-21 19:17:35