GCC與GDB版本兼容問題

2020-12-02 大話搜尋引擎

轉發https://www.cnblogs.com/wangchaoqun/p/5663951.html


今天在用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.6Copyright (C) 2013 Free Software Foundation, Inc.

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

(gdb) p i$1 = 11

相關焦點

  • 解決CentOS中gcc版本過低的問題
    哪個版本的gcc開始支持c++ 11 ?gcc 4.7。因此,如果我們代碼裡面需要用到c++標準的,就必須將gcc升級到gcc4.7以上。如何升級?如果直接升級了系統自帶的gcc,有可能導致系統自帶的程序出現不兼容的情況,導致系統崩潰。
  • Linux下C編程基礎之:gdb調試器
    本文引用地址:http://www.eepw.com.cn/article/257150.htm調試是所有程式設計師都會面臨的問題。如何提高程式設計師的調試效率,更好、更快地定位程序中的問題從而加快程序開發的進度,是大家都很關注的問題。就如讀者熟知的Windows下的一些調試工具,如VisualStudio自帶的設置斷點、單步跟蹤等,都受到了廣大用戶的讚賞。
  • Ubuntu12.10 使用JLink連接開發板用arm-gdb調試ARM程序
    Part1 環境搭建和工具安裝1.1 設置交叉編譯環境安裝相關的編譯工具:sudo apt-get install  build-essential gcc-arm-linux-gnueabi這裡我使用的是ubuntu系統源中含有的gcc-arm-linux-gnueabi系列工具
  • 建立ARM平臺上的交叉調試器gdb和gdbserver
    其中:host指定了運行環境為i386機器,target指定了需要調試的目標機環境(我使用的ARM toolchain是armv5-linux-uclibc-gcc,因此這樣指定,如果是用arm-linux-gcc,則 --target=arm-linux),prefix指定了編譯後的結果存放的位置,也就是安裝目錄。
  • 程式設計師的術與道:術——gdb基本操作
    1.gdb是什麼前面剛剛介紹了gcc,既然提到了gcc,下一個必須要提的是gdb。gdb同樣是GNU出品的一款功能強大的工具,橫掃linux世界gdb是一款調試工具,其功能之強大,深入使用之後你就會有感受。同gcc一樣,隨著gdb的使用你會有一種掌控一切的感覺。因為gdb更接近於底層,和作業系統的關係是那樣近。其操作的方式是那樣原始、野蠻,換句話說,更難但是學到的東西更多。
  • c編譯器救星,搞懂GCC c編譯器
    :8: return type of `main' is not `int'需 要注意的是,-pedantic編譯選項並不能保證被編譯程序與ANSI/ISO C標準的完全兼容,它僅僅只能用來幫助Linux程式設計師離這個目標越來越近。
  • gcc編譯器使用(Linux C/C++開發第二篇)
    推薦使用的gcc選項組合根據本人實際工作開發經驗,推薦:gcc -Wall -Wextra -O xxx.c 的組合方式。理由:與-O組合使用時會出未初始化的警告信息。gcc常用選項gcc的選項有上百個,但是經常用的也就10個左右,我們只要掌握好這些選項就夠用了選項-o用來指定要生產的結果文件,-o選項後面跟的就是結果文件名字。沒有-o選項的情況下,結果會在源文件相同的目錄下生產a.out的可執行文件。運用例:gcc hello.c -o hello選項-I選項-I(i的大寫)用來指定頭文件所在的文件夾路徑。
  • 手把手教你用gdb調試mongod
    編譯安裝MongoDB因為線上使用的是3.4.24版本,所以本文也採用該版本作為例子。觸發命令後,我們在gdb會話中,輸入c告訴gdb繼續執行,直到遇到我們設置的斷點。如果不幸的,我們沒法通過源碼發現find命令的入口,則只能藉助gdb使用更暴力一些的辦法。
  • windows下gcc的安裝和使用(更新)
    最近用到了c,找到之前自己的安裝記錄,發現閱讀量達到了4萬多了,說明大家碰到這個問題還是蠻多的。自己重新按照之前的步驟,發現居然報錯了。這個錯誤之前有個讀者反饋過,但是沒用到也沒碰到過,所以也沒有去試一下。
  • linux下Clang和gcc的區別
    這也是 gcc 做不到的 。專注,因為 clang 只需要完成詞法和語法分析,代碼優化和機器代碼的生成工作由 llvm 完成。所以和全部由自己包下的 gcc 比起來, clang 可以更專注地做好一件事。這種結構也使 clang 可以被單獨拿出來用在其他的程序裡,成為其它 app (主要是 IDE)的內嵌 C/C++ parser 。
  • gcc編譯器的基本使用
    gcc主要特徵:1: 可移植編譯器,支持多種硬體平臺。2:支持跨平臺交叉編譯(跨CPU)。在windows下,基本上都是個人機,都是x86架構的CPU(常見的AMD和intel都是x86架構),幾乎用不到跨平臺。而linux就不同了,它覆蓋有很多的CPU類型(蘋果的ppc)。這裡的跨平臺不是跨作業系統。
  • GDB 10.1版本發布了
    GDB可以定位(調試正在運行的程序)十多種不同的處理器架構,以及GDB可以在大多數流行的GNU / Linux,Unix和Microsoft Windows版本上運行。GDB是免費的(免費)軟體。可以從以下目錄的GNU FTP伺服器下載GDB: ftp://ftp.gnu.org/gnu/gdbGDB的網頁位於: http://www.gnu.org/software/gdb/GDB 10.1包括以下更改和增強功能:支持調試新目標:-BPF(bpf-unknown-none
  • 一文入門Linux下gdb調試(一)
    Makefile的文件中我們也是如上,只不過是在Makefile文件中 -o 編譯的時候添加 -g二、調試過程調用gdb調試,先查看電腦環境裡面是否有gdb調試器,一般我們安裝了gcc編譯器,就默認同時安裝了gdb調試器沒有的話要安裝gdb調試器,使用apt-get 就可以快速安裝apt-get updateapt-get
  • 淺析gcc、arm-linux-gcc和arm-elf-gcc的關係
    四、arm-linux-gccarm-linux-gcc 是基於 ARM 目標機的交叉編譯軟體,arm-linux-gcc 跟 GCC 所需的安裝包不同,但僅僅是名字不同而已,這是為什麼呢?arm-linux-gcc 使用 GNU 的 Glibc,而 arm-elf-gcc 一般使用 uClibc/uC-libc 或者使用 RedHat專門為嵌入式系統的開發的C庫newlib。只是所應用的領域不同而已,Glibc是針對PC開發的,uClibc/uC-libc是與Glibc API兼容的小型化C語言庫,實現了Glibc部分功能。
  • 嵌入式開發-C語言高級編程-(GCC、GDB)的使用
    編譯器的主要組件分析器:將原始碼轉換為彙編語言彙編器:彙編語言轉換為CPU可以執行的字節碼連結器:標準C庫:核心基本用法GCC最基本的用法:gccdefine _DEBUG_int main(){ double m =615,n; m +=N; n = sqrt(m);34;debug:m=%lf n=%lf\n&else printf(&34;,m,n); #endif return 0; }gcc
  • 一文入門Linux下gdb調試(一)
    GDB都有,此外gdb還可以生成程序非法執行後core dump文件,這個文件有快照功能,在程序崩潰的時候保存了程序的堆棧等信息,我們執行core文件就可以方便的找程序崩潰的原因了。調試,先查看電腦環境裡面是否有gdb調試器,一般我們安裝了gcc編譯器,就默認同時安裝了gdb調試器
  • 如何在Linux系統中手動安裝arm-linux-gcc交叉編譯工具
    (懶人可直接跳至文章末尾)(我的系統:Windwos10 Ubuntu子系統,版本:Ubuntu 18.04.4 LTS x64)七、檢查arm-linux-gcc是否安裝正確~$ arm-linux-gcc -v出現版本號則說明安裝成功,可以開心的編譯了八、常見問題在Ubuntu系統下arm-none-linux-gnueabi-gcc
  • gdb工具對mysql進行源碼調試
    關於如何編譯一個Debug的MySQL,過程比較繁瑣,下載源碼,安裝c/c++開發環境,安裝cmake等等,很容易出錯,並且可能編譯出來的版本與官方發行的版本,在編譯選項和參數上存在不一致。本文介紹一種更加簡便的調試MySQL的方法。