1. 程式人生 > >gdb列印資訊2——列印記憶體的值以及使用$_

gdb列印資訊2——列印記憶體的值以及使用$_

測試程式碼

#include <stdio.h>

int main (int argc, char *argv[]) {

	int i = 0;
	char a[100];

	for (i = 0; i < sizeof(a); ++i) {
		a[i] = i;
	}
    return 0;
}

測試過程

首先打上斷點,跑起來
在這裡插入圖片描述
這樣,就完成了賦值操作
然後就可以檢視記憶體的值了,這裡的陣列是char型別(1個位元組)的,陣列名是首地址
可以使用x/nfu addr命令來列印記憶體的值,
意思是以f格式,列印從addr開始的n個長度單元為u

的記憶體值

  • n:輸出單元的個數
  • f:輸出的格式,x為16進位制形式,o為八進位制,u為十進位制,t為二進位制
  • u:一個單元的長度,b是一個byte,h是兩個byte,w是四個byte(一個word)

以16進位制格式列印陣列前16個byte的值
在這裡插入圖片描述

以8進位制格式列印陣列前16個byte的值
在這裡插入圖片描述

以十進位制格式列印陣列前16個byte的值
在這裡插入圖片描述

以二進位制格式列印陣列前16個byte的值
在這裡插入圖片描述

以16進位制格式列印陣列前16個word的值
在這裡插入圖片描述

現在我們換成int

型別的陣列來看一下,由於int型別佔用四個位元組,那我們會得到什麼樣的結果呢
可以看到,每四個位元組才完成一次賦值操作。
在這裡插入圖片描述

使用$_

在使用了x或者是info等命令後,會把最後檢查的記憶體地址存在 $_ 中,並且把地址中的內容放在 $__
在這裡插入圖片描述

在這裡插入圖片描述