示例**如下:
#include#includeint main()
i = 0;
for (; i < 10; i++)
free(p);
return 0;
}
編譯命令gcc -g -omain memlook.c然後執行gbd ./main進入除錯。
(gdb) list 15
10 }
11 i = 0;
12 for (; i < 10; i++)
13
16 free(p);
17 return 0;
18
19 }
在free(p)處設定斷點break 16
(gdb) break 16
breakpoint 1 at 0x74e: file memlook.c, line 16.
然後執行
(gdb) run
starting program: /mnt/hgfs/linux/cpp/gdblearn/main
breakpoint 1, main () at memlook.c:16
16 free(p);
接下來檢視指標p指向的資料
int *array = (int *) malloc (len * sizeof (int));
在gdb除錯過程中這樣顯示出這個動態陣列的值:
p *array@len
示例:(gdb) print *p@10
$1 = "\000\001\002\003\004\005\006\a\b\t"
(gdb) print *(char*)p@10
$2 = "\000\001\002\003\004\005\006\a\b\t"
(gdb) print *(int*)p@10
$3 =
(gdb)
方式二:
x/表示乙個記憶體位址。「x/」後的n、f、u都是可選的引數,n 是乙個正整數,表示顯示記憶體的長度,也就是說從當前位址向後顯示幾個位址的內容;f 表示顯示的格式,如果位址所指的是字串,那麼格式可以是s,如果位址是指令位址,那麼格式可以是i;u 表示從當前位址往後請求的位元組數,如果不指定的話,gdb預設是4位元組。u引數可以被一些字元代替:b表示單位元組,h表示雙位元組,w表示四位元組,g表示八字節。當我們指定了位元組長度後,gdb會從指定的記憶體位址開始,讀寫指定位元組,並把其當作乙個值取出來。n、f、u這3個引數可以一起使用,例如命令「x/3uh 0x54320」表示從記憶體位址0x54320開始以雙位元組為1個單位(h)、16進製制方式(u)顯示3個單位(3)的記憶體。
print的輸出格式包括:
x 按十六進製制格式顯示變數。
d 按十進位制格式顯示變數。
u 按十六進製制格式顯示無符號整型。
o 按八進位制格式顯示變數。
t 按二進位制格式顯示變數。
a 按十六進製制格式顯示變數。
c 按字元格式顯示變數。
f 按浮點數格式顯示變數。
示例如下:
(gdb) x/10db p
0x555555756260: 0 1 2 3 4 5 6 7
0x555555756268: 8 9
(gdb) x/10dh p
0x555555756260: 256 770 1284 1798 2312 0 0 0
0x555555756270: 0 0
(gdb)
x/10db p 表示檢視p指標指向的記憶體中往後10個位址的資料,並以十進位制格式顯示變數,以單位元組讀寫指定位元組。
(gdb) print *(int*)p
$5 = 50462976
*(int*)p表示將按照整型指標處理。
例子:main()
我們在char *c = "hello world";
(gdb) l
1 main()
2
(gdb) b 4
breakpoint 1 at 0x100000f17: file main.c, line 4.
(gdb) r
starting program: /users/songbarry/main
reading symbols for shared libraries +. done
breakpoint 1, main () at main.c:4
4 printf("%s\n", c);
可以通過多種方式看c指向的字串:
方法1:
(gdb) p c
$1 = 0x100000f2e "hello world"
方法2:
(gdb) x/s 0x100000f2e
0x100000f2e: "hello world"
方法3:
(gdb) p (char *)0x100000f2e
$3 = 0x100000f2e "hello world"
將第乙個字元改為大寫:
(gdb) p *(char *)0x100000f2e='h'
$4 = 72 'h'
再看看c:
(gdb) p c
$5 = 0x100000f2e "hello world"
指向指標資料的指標
練習一使用指向指標資料的指標變數輸出指向的字串 樣例 follow me basic great wall fortran computer design process exited after 0.02186 seconds with return value 0 請按任意鍵繼續.使用指向指標資...
GDB資料檢視
檢視棧資訊 當程式被停住了,首先要確認的就是程式是在哪兒被斷住的。這個一般是通過檢視呼叫棧資訊來看的。在gdb中,檢視呼叫棧的命令是backtrace,可以簡寫為bt。gdb bt 0 pop at stack.c 10 1 0x080484a6 in main at main.c 12也可以通過i...
指向資料成員的指標
指向資料成員的指標 收藏 指向資料成員的指標 指向資料成員的指標,是乙個有點神秘又頗有用處的語言特性,特別是如果你需要詳細調查class members的底層布局的話。這樣的調查可以用於決定vptr是放在class的起始處或者尾端。另外乙個用途是可以用來決定class中的access section...