gcc與gdb版本相容問題

tangzhnju發表於2013-06-17

今天在用gdb除錯C++程式的時候,想用"p i”命令列印出程式的一個區域性變數i,卻一直提示:

No symbol "i" in current context.

我愣了下,想到有幾種原因可能導致這種情況:

1、編譯的時候沒有加上-g選項,一直編譯器沒有在可執行程式中加入除錯資訊;

2、編譯的時候加上了優化選項,使得編譯器把某些變數優化掉了;

3、斷點加的位置不對,變數超出作用域了。

我重新檢查了程式以及編譯命令,的確是沒錯的。於是我只能在程式中加了個全域性變數gi,然後gdb起來,p gi,發現全域性變數卻是可以顯示的。

google了好久都沒解決問題,後來再次進入gdb準備嘗試的時候,突然無意間看到當前的gdb版本是7.2。

我突然想到這臺虛擬機器上的CentOS 6.4自帶的gcc版本貌似只有4.6.x,而之前我已經將gcc升級到了4.8.1,升級跨度還是蠻大的,是不是有可能gcc4.8.1和gdb7.2不相容?

於是我下gdb的原始碼包(最新版本7.6),解壓,./configure,make,sudo make install,安裝過程很快,比gcc快多了。安裝好之後gdb –v:

GNU gdb (GDB) 7.6
Copyright (C) 2013 Free Software Foundation, Inc.

然後gdb走起,果然可以了:

(gdb) p i
$1 = 11

版本問題真夠坑爹的,把問題貼出來,但願讓大家少走彎路。

相關文章