文章目錄
- 一、樣例代碼
- 二、使用
- watch
- set var確定問題原因
- 條件斷點
一、樣例代碼
#include <stdio.h>int Sum(int s, int e)
{int result = 0;int i;for(i = s; i <= e; i++){result += i;}return result;
}int main()
{int start = 1;int end = 100;printf("I will begin\n");int n = Sum(start, end);printf("running done, result is: [%d-%d]=%d\n", start, end, n);return 0;
}
- 程序的發布方式有兩種,
debug
模式和release
模式, Linuxgcc/g++
出來的二進制程序,默認是release
模式。 - 要使用gdb調試,必須在源代碼生成二進制程序的時候, 加上
-g
選項,如果沒有添加,則程序無法被編譯
二、使用
進入調試
gdb binFilename
推薦使用cgdb可以看到代碼進行調試
- Ubuntu:
sudo apt-get install -y cgdb
- Centos:
sudo yum install -y cgdb
watch
- 執行時監視一個表達式(如變量)的值。如果監視的表達式在程序運行期間的值發生變化,GDB會暫停程序的執行,并通知使用者
- 如果你有一些變量不應該修改,但是你懷疑它修改導致了問題,你可以watch它,如果變化了,就會通知你.
watch result
set var確定問題原因
- 在調試的監視窗口要手動改變一個變量的值就可以使用
set var
- eg:set var flag=1
條件斷點
條件斷點添加常見兩種方式:
- 新增
- 給已有斷點追加
- 注意兩者的語法有區別,不要寫錯了。
- 新增:b 行號/文件名:行號/函數名
if i == 30
(條件) - 給已有斷點追加:
condition 2 i==30
,其中2是已有斷點編號,沒有if
添加條件斷點
eg:b 9 if i == 30
,其中9是行號,表示新增斷點的位置
給已經存在的端點新增條件
eg:condition 2 i==30
,其中給2號斷點,新增條件i==30