簡單的操做命令整理:
編譯時加上參數-g,加入調試信息
l,顯示代碼
l+文件名,顯示文件代碼
b+行號,加入斷點
info break,查看斷點信息
clear,清除斷點
d+斷點編號,清除第n個斷點
b+函數名稱,在函數插入斷點
r,運行程序
c,繼續程序
s,單步執行/進入函數
n,逐過程執行
finish,跳出
p+變量名,打印變量
disp+變量名,持續打印變量
bt,函數調用堆棧關係
info threads,線程信息
thread+id,追蹤id線程
set follow-fork-mode child,追蹤子進程
set follow-fork-mode parent,追蹤父進程
ctrl+X ctrl+A 進入一個簡單的圖形界面函數
庫:預先編譯好的方法的集合線程
libxxx.a
編譯連接跟隨程序,編譯完成後刪除了也能夠使用
ar crv libxxx.a aa.o bb.o(c 建立 r 包含方法 v 顯示進度)調試
libxxx.so
不一樣的程序都可共享,可是是程序運行中加載,不能刪除(通常放在默認路徑/usr/lib中)
gcc -shared -fPIC -o libxxx.so aa.o bb.o對象
-fPIC 做用於編譯階段,告訴編譯器產生與位置無關代碼(Position-Independent Code),則產生的代碼中,沒有絕對地址,所有使用相對地址,故而代碼能夠被加載器加載到內存的任意位置,均可以正確的執行。這正是共享庫所要求的,共享庫被加載時,在內存的位置不是固定的,若是不加-fPIC,則加載.so文件的代碼段時,代碼段引用的數據對象須要重定位, 重定位會修改代碼段的內容,這就形成每一個使用這個.so文件代碼段的進程在內核裏都會生成這個.so文件代碼段的copy.每一個copy都不同,取決於 這個.so文件代碼段和數據段內存映射的位置.進程
gcc -o main main.c -L(庫的路徑) -l(庫名)
//庫名是不包含lib以及後面的後綴名的內存