Linux gcc,g 區別 gdb除錯

2021-10-23 21:16:10 字數 1345 閱讀 1210

誤區:gcc編譯c語言,g++編譯c++

區別1:gcc編譯c++**需要加-lstdc++,gcc預設只鏈結c庫,並不會鏈結c++庫,需要手工指定

g++預設鏈結c庫和c++標準庫

區別2:gcc如果編譯c語言檔案,用c語言方式編譯,編譯c++用c++方式編譯,g++不管編譯c還是c++都用c++標方式編譯

可執行檔案的兩種版本

1.debug版本,除錯版本,編譯階段會加入某些除錯資訊

編譯時,加入-g選項,可生成debug版本

2.release版本,發行版本,沒有除錯資訊

gcc預設生成release版本

gdb debug版本可執行檔案

顯示原始碼:l(list)(預設顯示main函式所在檔案的原始碼)

list filename:行號

斷點管理

新增斷點:1.b 行號 給指定行新增斷點

2.b 函式名 給指定函式實現第一行新增乙個斷點

3.b filename 行號 給指定檔案的行號新增乙個斷點

檢視斷點資訊:info b

刪除斷點:d 斷點號

執行管理

r 啟動執行,程式執行到邏輯上的第乙個斷點處

n 逐過程

s 逐語句

finish 跳出函式

c 繼續執行,直到下乙個斷點

u 退出迴圈

q 退出除錯

顯示變數的值

p 變數名 輸入一次,執行一次

display 變數名 執行過程中,每執行一步,顯示一次

info display 顯示所有display資訊

undisplay display編號 取消乙個display

p &valname 顯示變數位址

p ptr 顯示ptr中儲存的值,指向變數的位址

p *ptr 顯示ptr指標指向的變數的值

p arr 顯示陣列所有元素

p arr 在形參中退化為指標 p *arr@陣列大小 顯示陣列所有元素

對於結構體變數

p node 顯示結構體變數中所有成員的值

p node.a 顯示node中a成員的值

p node->a

如果測試乙個有返回值的函式能否正常執行

p 函式名(傳遞的實參)顯示函式執行結果

bt 顯示函式呼叫棧

Linux gcc g 編譯器使用

1.首先應會設定幾個好用的環境變數 cplus include path cplus include path home test include 此環境變數用來設定標頭檔案包含路徑,這樣就不用編譯的時候新增路徑咯 ld library path ld library path home test ...

Linux gcc g 靜態庫與動態庫

原始碼 test.h pragma once void test test.c include stdio.h void test hello.h pragma once void hello const char name hello.c include stdio.h include hello...

Linux gcc g 編譯器的使用

編譯器編譯過程要經歷四個階段 1.預處理 進行巨集替換 e 2.編譯 生成彙編 s 3.彙編 生成機器可識別 c 4.連線 生成可執行檔案或庫檔案 o 預處理 進行巨集替換 編譯 生成彙編 彙編 生成機器可識別 連線 生成可執行檔案或庫檔案 函式庫一般分為靜態庫和動態庫兩種 gdb是除錯乙個程式的執...