Linux編程基礎——GDB(入門)


調試是開發過程中一項不可或缺的工作,在Linux編程中,通常使用gdb來調試我們的c/c++程序,由於gdb可介紹的東西比較多,這里將分幾篇文章介紹,網上有篇文章介紹的非常詳細,值得收藏:用GDB調試程序(一)(二)(三)(四)(五)(六)(七)

前期准備

在程序編譯的時候,函數名、變量名會被相應的內存地址所代替,但這些內存地址對於我們來說是不可讀的。我們往往需要需要根據函數名、變量名來查找實際的地址,從而讀取其值。

為了方便調試,gcc增加了一個-g參數,在編譯的時候可以在程序集中添加相應的符號信息。

    gcc -g hello.c -o hello

啟動GDB

啟動GDB的方法有以下幾種:

  1. gdb <program>     gdb關聯程序,可以通過run命令啟動關聯上的程序進程。
  2. gdb <program> core     gdb調試core文件,core是程序非法執行后core dump后產生的文件。
  3. gdb <program> <PID> gdb調試當前正在運行的進程,類似VS中的"附加到進程"方式的調試。

這些方式實際上也可以自由組合使用。例如,我們也可以先通過gdb <program>關聯程序,然后通過attach <pid>的方式調試當前正在運行的進程。

GDB環境簡介

首先介紹下GDB環境,GDB也是一個Shell式的交互環境,在GDB中,可以進程看到其提示符:(gdb)

    (gdb) break

在gdb中,也想VS那樣有一定的智能提示功能,具體如下:

  1. 輸入命令時,可以不用打全命令,只用打命令的前幾個字符就可以了。
  2. 當輸入前幾個字符后,可以通過Tab鍵自動補全
  3. 當前幾個字符開頭的命令較多時,Tab鍵無法補全,再次敲TAB鍵可以顯示所有該字符開頭的命令。
  4. 可以通過回車鍵重復執行命令(單步跟蹤的時候常用)
  5. 可以通過上下鍵切換歷史命令

例如,設置斷點的命令是break,可以直接輸入b;也可以輸入b后敲兩次Tab鍵以查詢所有b開頭的命令(只有一個的話可以直接補全):

    (gdb) b
    backtrace bookmark break break-range bt

這個智能提示也可以使用於在設置斷點時候自動聯想函數名稱,例如,我們要對main函數設置斷點,當輸入b mai后敲Tab鍵,會自動補全為main

    (gdb) b main

另外,也可以通過help <command>命令查看不熟悉的命令的幫助信息,類似於shell下的man,非常方便。

退出GDB

退出gdb的方式比較簡單,直接在Shell下輸入q(quit)命令就可以了:

    (gdb) q
    tianfang >

由於篇幅所限,本文暫且介紹到這里,下篇文章主要介紹如何設置斷點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM