先寫乙個不能正確change的**:
linux@ubuntu:
~/workspace/pointer$ cat main2.c
#include
void
change
(int a ,
int b)
intmain()
然後使用gdb工具編譯:
gcc -g main2.c -o main2.out
然後進入gdb除錯:
gdb .
/main2.out
然後開始gdb除錯:
start
顯示函式、檢視a變數、執行下一句、進入函式等語句進行除錯
l //顯示函式,顯示不完全時繼續l
p a// 檢視a變數的值
n //執行一句**
s //進入函式裡面
bt //檢視函式堆疊
q //退出除錯
由下面可以看出只是把5和3兩個數傳到了a和b:
(gdb) s
change (a=
5, b=
3) at main2.c:
5
bt(堆疊)的作用(在子函式裡使用bt):
(gdb) bt
#0 change (a=
5, b=
3) at main2.c:5#1
0x0804842b in main (
) at main2.c:
13
此時change函式壓在main函式上邊,此時p a 列印的是change裡面的a;
按 f 1 切回到main函式;按f 0 切回到main函式;
寫乙個能正確change的**:
linux@ubuntu:
~/workspace/pointer$ cat main.c
#include
void
change
(int
* a ,
int* b)
intmain()
進入gdb除錯後進入change函式內部:
(gdb) n
13change
(&a,
&b);
(gdb) s
change (a=
0xbffff338
, b=
0xbffff33c
) at main.c:55
int tmp=
*a;(gdb) n
6*a=
*b;(gdb) p tmp$1=
5(gdb) p a$2=
(int*)
0xbffff338
(gdb) p b$3=
(int*)
0xbffff33c
可以看出來,int a在記憶體中分配的位址是0xbffff338,int b的位址是0xbffff33c,正好相差4個位元組。
(gdb) n
7*b=tmp;
(gdb) p a$4=
(int*)
0xbffff338
(gdb) p b$5=
(int*)
0xbffff33c
(gdb) p *a //&是取位址,*是取位址裡的內容
$11=
3(gdb) p *b
$12=
3
centos下Linux C語言MD5的使用
在linux c變成中用到md5加密會使用到openssl庫,下面給出的是乙個簡單的小demo include include include define md5 length 16 define max 40 int main void fprintf stderr,s n buf return...
Linux c程式設計之gdb的使用
gdb是在linux的控制台視窗下的乙個除錯工具,功能十分強大,今天些簡單的學習一下關於gdb的基本使用 首先,用gcc編譯程式時需要加上 g引數以便獲取除錯資訊 首先要使用gdb除錯程式,在用gcc編譯時要加上 g引數,否則gdb會提示缺少除錯資訊。如下圖 因此,需要使用如下方法編譯程式 gcc ...
gdb工具的使用
gdb是乙個互動式的除錯工具,在linux系統中可以很好地幫助我們完成程式的除錯。它的主要功能有 1.設定斷點,讓程式直接執行至可能出錯的地方 2.檢視變數的值,在除錯過程中隨時檢視我們關注的變數的值。3.修改變數的值,這是vs的偵錯程式所不具有的功能,可以幫助我們更快的定位程式的問題所在。那麼gd...