今天在用gdb調試C++程序的時候,想用"p i」命令打印出程序的一個局部變量i,卻一直提示:優化
No symbol "i" in current context.
我愣了下,想到有幾種緣由可能致使這種狀況:google
一、編譯的時候沒有加上-g選項,一直編譯器沒有在可執行程序中加入調試信息;spa
二、編譯的時候加上了優化選項,使得編譯器把某些變量優化掉了;調試
三、斷點加的位置不對,變量超出做用域了。code
我從新檢查了程序以及編譯命令,的確是沒錯的。因而我只能在程序中加了個全局變量gi,而後gdb起來,p gi,發現全局變量倒是能夠顯示的。blog
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
版本問題真夠坑爹的,把問題貼出來,希望讓你們少走彎路。