一、GCClinux
linux下,gcc 是指gcc c編譯器。咱們從一個程序到一個可執行文件來講明gcc的幾個選項:數組
若是你寫的代碼是hello.c,你的程序將經歷下面的步驟到達硬盤或者內存成爲可執行文件。ide
gcc -E main.c -o main.i //第一步:hello.c(文本)通過預編譯生成hello.i(文本)函數
gcc -S main.i -o main.S //第二步:hello.i(文本)通過編譯器生成hello.s(彙編。文本)spa
gcc -c main.c -o main.o //第三步:hello.s(文本)通過彙編器生成hello.o(二進制)。調試
gcc main.o -o main //第四步:hello.o(二進制)通過連接器生成hello可執行文件。orm
通常狀況下用gcc main.c -o main 就能夠直接生成可執行文件main。blog
二、gdb(一些基本的調試命令)內存
須要調試的程序在編譯的時候要加 -g 選項,程序才能進行調試
get
list 顯示源文件:
list 沒有參數,顯示當前行以後或周圍的10多行
list start,end 顯示從行號start到end之間的代碼行。
print 查看運行時的數據
print i 顯示當前變量i的值
print &i 顯示變量i的存放地址
print array@1 顯示從array(數組名)開始的5個值
print array[2]@3 顯示從array第二個元素開始的3個數組元素的值
whatis i 顯示變量i的數據類型
設置斷點 break
break linenum 在當前文件指定行linenum處設置斷點
break function 在當前文件函數function的入口處設置斷點
顯示斷點 info info breakpoints/break/watchpoints [num]
單步跟蹤 step [N] 若是遇到函數調用,而且該函數編譯時有調試信息,則會進入該函數內執行。
next [N] 遇到函數調用時,執行整個函數。
連續執行continue 從當前行開始,連續執行到下一個斷點處,或者到達該程序結束。命令中能夠給出一個數字N,忽略其後N-1次斷點。
運行程序 run。
clear(清除全部已定義的斷點),delete(刪除全部斷點,後面可給出斷點號碼,多個斷點用空格分開)
最後,補充一句上面的函數均可以用首字母簡寫