預備知識
程序的發布?式有兩種, debug 模式和 release 模式, Linux gcc/g++ 出來的?進制程
序,默認是 release 模式。
要使?gdb調試,必須在源代碼?成?進制程序的時候, 加上 -g 選項,如果沒有添加,程序?法被
編譯,makefile中也需要加上。
$ gcc mycmd.c -o mycmd # 默認模式,不?持調試
$ file mycmd
mycmd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-x86-64.so.2,
BuildID[sha1]=82f5cbaada10a9987d9f325384861a88d278b160, for GNU/Linux
3.2.0, not stripped
$ gcc mycmd.c -o mycmd -g # debug模式
$ file mycmd
mycmd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-x86-64.so.2,
BuildID[sha1]=3d5a2317809ef86c7827e9199cfefa622e3c187f, for GNU/Linux
3.2.0, with debug_info, not stripped
常?使?
開始: gdb 目標文件
退出: ctrl + d 或 quit 調試命令




使用實例:

這里在第五行打了一個斷點 b 5 ,然后運行代碼 r,代碼在第五行這個位置停下了,l/list可以顯示10行的代碼,剩下的一些使用大家可以自己去嘗試。
安裝cgdb:
上?的基本調試還是?煩,雖然是?屏,但是還是想看到代碼調試
推薦安裝cgdb:
Ubuntu: sudo apt-get install -y cgdb
Centos: sudo yum install -y cgdb

watch
執?時監視?個表達式(如變量)的值。如果監視的表達式在程序運?期間的值發?變化,GDB 會暫停程序的執?,并通知使?者
GDB 會默認監控?當前作用域?中的變量:如果在函數內部設置觀察點,且該函數有同名局部變量,則觀察的是?局部變量。如果在全局作用域(如?main
?函數開始前)設置觀察點,則觀察的是全局變量
添加條件斷點
實例
新建斷點時添加條件 b n(斷點序號) if i==30
給已經存在的端點新增條件 condition n(斷點序號) i==30

條件斷點添加常?兩種?式:1. 新增 2. 給已有斷點追加
注意兩者的語法有區別,不要寫錯了。
新增: b ?號/?件名:?號/函數名 if i == 30(條件)
給已有斷點追加:condition 2 i==30, 其中2是已有斷點編號,沒有if