1. 程式人生 > >GCC和GDB

GCC和GDB

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可執行文件。

技術分享

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

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

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

技術分享

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

技術分享

技術分享

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

GCC和GDB