gcc編譯器與gdb調試器

gcc編譯器與gdb調試器

編譯過程可分爲四個階段:

  1. 預處理(Pre-Processing)
  2. 編譯(Compiling)
  3. 彙編(Assembling)
  4. 鏈接(Linking)

gcc文件類型約定規則:

在這裏插入圖片描述

gcc常用選項:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-97gPgoDa-1590075237154)(C:\Users\HUAWEI\Desktop\image-20200521211226703.png)]

常用的有 -o -c -S -E -g -O

**預處理:*在預處理階段,gcc把預處理命令掃描處理完畢,輸入C語言的源文件,通常爲.c

它們通常帶有.h之類的頭文件的包含文件,這個階段主要處理源文件中的#ifdef#include和#define等預處理命令,該階段會生成一箇中間文件*.i,可以使用-E生成中間文件.i

gcc -E hello.c -o hello.i

**編譯:*gcc把預處理後的結果編譯成彙編或者目標模塊,輸入的中間文件 * .i,編譯後生成彙編語言文件.s

gcc -S hello.i -o hello.s

**彙編:*彙編階段,編譯器把編譯出來的結果彙編成具體CPU上的目標代碼模塊,輸入彙編文件 * .s,輸出機器語言.o

gcc -c hello.s -o hello.o

**鏈接:*在鏈接階段把多個目標代碼模塊連接成一個大的目標模塊,輸入機器代碼文件, .o,彙集成一個可執行的二進制代碼文件。

gcc hello.o -o hello

優化gcc

編譯器通過分析源代碼,找出其中尚未達到最優的部分,然後對其進行重新組合,改善程序的執行性能。

gcc -On

gcc -O2 常用

gcc -O0 不進行優化

調試選項

默認情況下,gcc在編譯時不會建個調試符號插入到生成的二進制代碼中,如果需要生成調試符號信息,可以使用gcc -g選項,一般不加調試選項,否則會使代碼增大。

gdb調試器

功能表:

  1. 設置斷點
  2. 單步執行程序,便於調試
  3. 查看程序中變量值的變化
  4. 動態改變程序的執行環境
  5. 分析崩潰程序產生的core文件

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-jKCuZJDT-1590075237155)(C:\Users\HUAWEI\Desktop\image-20200521220135777.png)]

設置斷點
break 4

break main

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LO9yyYUk-1590075237157)(C:\Users\HUAWEI\Desktop\image-20200521222933368.png)]

單步執行程序
step 步入
next 下一行
查看運行時的數據 print display
print <expr>
print/<f> <expr>
display 可以設置一些自動顯示的變量,當程序停住時,或是在單步跟蹤時,這些變量會自動顯示,相關的gdb命令是display,格式如下
display<expr>
display/<fmt><expr>
display/<fmt><addr>

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ncQF1CxU-1590075237158)(C:\Users\HUAWEI\Desktop\image-20200521224510964.png)]

查看源程序

1、顯示源代碼

gdb可以打印出所調試程序的源代碼,編譯時一定要加上-g參數,用list來顯示源代碼

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-HvwCPhqs-1590075237159)(C:\Users\HUAWEI\Desktop\image-20200521231148390.png)]

2、源代碼內存

info line命令查看源代碼在內存中的地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章