GCC和GDB

1、GCC

  linux下,gcc 是指gcc c編譯器。我們從一個程序到一個可執行文件來說明gcc的幾個選項:

  如果你寫的代碼是hello.c,你的程序將經歷下面的步驟到達硬盤或者內存成爲可執行文件。

gcc -E main.c -o main.i //第一步:hello.c(文本)經過預編譯生成hello.i(文本)

gcc -S main.i -o main.S //第二步:hello.i(文本)經過編譯器生成hello.s(彙編。文本)

gcc -c main.c -o main.o //第三步:hello.s(文本)經過彙編器生成hello.o(二進制)。

gcc main.o -o main    //第四步:hello.o(二進制)經過鏈接器生成hello可執行文件。

wKiom1noBM2hp6S6AACH8TfOt6I961.png

一般情況下用gcc main.c -o main 就可以直接生成可執行文件main。

2、gdb(一些基本的調試命令)

需要調試的程序在編譯的時候要加 -g 選項,程序才能進行調試

wKiom1noBwiiWOxaAADzyX-Rm7k841.png

list 顯示源文件:

          list 沒有參數,顯示當前行之後或周圍的10多行

          list start,end  顯示從行號start到end之間的代碼行。

wKiom1noCd7DSgt0AABTaqHGwAQ473.png

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(刪除所有斷點,後面可給出斷點號碼,多個斷點用空格分開)

3c2c56c4b7616619b505d3ebc7cc909c.png

6857b05b227a7a81f1350532880fa0e2.png

  最後,補充一句上面的函數都可以用首字母簡寫

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