-
在gdb里面 你輸入bt命令就會(huì)顯示當(dāng)前函數(shù)堆棧
假如你是從main函數(shù)調(diào)用了一個(gè)函數(shù)add(),在函數(shù)add()中又調(diào)用一個(gè)minus()的,你在進(jìn)入minus函數(shù)輸入bt,就會(huì)顯示:
#0 minus()....
#1 ...add()...
#2 ...mian()...????????????//..是省略了一些東西
此時(shí)你輸入f0 ?就是進(jìn)入 minus的堆棧; f1是進(jìn)入add()的堆棧...
如果我答的沒有錯(cuò)的話。。
3-1gdb工具的使用 課程有講。
查看全部 -
棧先進(jìn)后出
查看全部 -
?代碼段里先聲明的地址小后大, 棧相反
查看全部 -
pa pb指針類型? ?保存內(nèi)存地址? 占8字節(jié)
查看全部 -
pa 只是個(gè)代號(hào), *pa=&a后
打印pa得到0x7fffffffddfc這個(gè)地址是a所在的地址
打印&pa得到0x7fffffffde08這個(gè)是pa本身的地址
查看全部 -
棧在高地址
查看全部 -
chengxu2
查看全部 -
chengxu
查看全部 -
12345
查看全部 -
GDB工具
s:執(zhí)行一行代碼(若有函數(shù)調(diào)用進(jìn)入該函數(shù))【Step?Into】
n:? 執(zhí)行一行代碼(函數(shù)調(diào)用一并執(zhí)行)【Step?Over】
p<變量名>:顯示變量的值
q:退出
l:(list)列出源碼
查看全部 -
1?指針?數(shù)組?字符串
2?堆內(nèi)存?棧內(nèi)存
3?GDB? 調(diào)試工具
查看全部 -
指針變量其實(shí)代表的是地址,加*表示取這個(gè)地址的值查看全部
-
64位操作系統(tǒng)? c語言 指針類型變量? 占用8字節(jié)內(nèi)存空間
32位 占用4字節(jié)
根據(jù)內(nèi)存地址。內(nèi)存地址從大到小依次為系統(tǒng)內(nèi)核,棧,堆,數(shù)據(jù)段,代碼段
代碼段地址,先證明的函數(shù)內(nèi)存地址低, 后聲明的函數(shù)內(nèi)存地址高
棧段地址, 在函數(shù)被調(diào)用時(shí)分配內(nèi)存地址,后進(jìn)先出,先調(diào)用的函數(shù)內(nèi)存地址高,后調(diào)用的函數(shù)內(nèi)存地址低;
數(shù)據(jù)段地址, 存放全局變量, 靜態(tài)變量,使用低位地址。
查看全部 -
gdb 終端調(diào)試工具
gcc -g main.c -o main.out 生成可調(diào)式的執(zhí)行文件
注意,此時(shí)源代碼.c文件仍不可刪除。否則仍然不支持調(diào)試。
調(diào)制過程:
1、 gdb? main2.c?? 進(jìn)入調(diào)試模式;
2、調(diào)試模式 輸入? “l(fā)ist”? 或者 “l(fā)”? 列出當(dāng)前項(xiàng)目的軟件源代碼;
3、“start”? 開始調(diào)試,默認(rèn)斷點(diǎn)在main函數(shù)的第一行代碼;
4、"p" 表示print , 輸出變量值;
5、“n" 表示執(zhí)行一行代碼挑到下一行;
6、 “s” 表示按步驟執(zhí)行代碼, 可進(jìn)入調(diào)用函數(shù)內(nèi)部;
7、“bt” 表示顯示函數(shù)堆棧, 可顯示有哪些函數(shù)在運(yùn)行;此時(shí)使用"p"打印的是當(dāng)前函數(shù)中的變量值, 即標(biāo)號(hào)為#0的函數(shù);
8、"f" 切換當(dāng)前跟蹤的堆棧內(nèi)函數(shù); eg: f 1(1 為“bt”中的函數(shù)編號(hào));
9、“q”跳出調(diào)試模式;
查看全部 -
int *a???? int* a? 均是合法的指針變量定義方式
int *a = &b; // 表示將變量b的內(nèi)存地址保存到指針類型變量a中;
printf("%d", *a);? // *a 表示(a=0x7ffffffffe4c0)這個(gè)地址中保存的值,即變量b的值;a本身為內(nèi)存地址 用16進(jìn)制數(shù)表示。
& 符 表示取地址
函數(shù)指針:
eg:
//定義函數(shù)?參數(shù):int型,?返回值:int型 int?quadrate(int?a?){ ..... } //定義函數(shù)指針類型變量?pq指向函數(shù)quadrate,?返回值類型+參數(shù)類型都需要對(duì)應(yīng) int?(*pq)(int?a)?=?&quadrate;? int?s?=?(*pq)(3);?//通過pq指針變量調(diào)用函數(shù)?quadrate
函數(shù)指針變量保存的是,函數(shù)的代碼段內(nèi)存地址, 使用(*pp)調(diào)用時(shí), 程序即應(yīng)用代碼段內(nèi)存中的內(nèi)容處理參數(shù)。
查看全部
舉報(bào)