每天学点GDB 4

本节侧重于如何用各种方法查看变量的值。

#include <stdlib.h>
#include <stdio.h>

void show_slogan(char* slogan);
int counter;
char* welcome_msg = "you are welcome!";
int main(int argc, char** argv) {
  int i = 0;
  counter = 0;
  show_slogan(welcome_msg);
  return 0;
}

void show_slogan(char* slogan) {
  printf("%s\n",slogan);
  counter++;
  printf("you'

编译

gcc -o test -g test.c

启动gdb

gdb test

gdb)br 10

gdb)r

程序运行至断点1,即行10

显示局部变量的值

gdb)info loal

i = 10

打印i的地址

gdb)p &i

$1 = (int *) 0x7fffffffe7cc

因为作者当前是64位cpu,故显示为64位指针

有了指针,就可以使用大杀器"x"

多费一句话,在gdb中,查看内存中到底放置了哪些东西关键的关键就是要学会使用x并理解其输出内容中的具体含义。

gdb)x 0x7fffffffe7cc

显示当前指针中包含的值,与p i的效果相同。

如果上述i的例子不能让你有较深印象的话,那么就用welcome_msg来说明问题中。

gdb)p welcome_msg

$5 = 0x400664 "you are welcome!"

现在有了welcome_msg的指针,有x来打印内容

gdb)x/s 0x400664

0x400664:"you are welcome!"

想到byte级别,好的使用修饰符c

gdb)x/16c 0x400664

 

0x400664: 121 'y' 111 'o' 117 'u' 32 ' ' 97 'a' 114 'r' 101 'e' 32 ' '
0x40066c:	119 'w'	101 'e'	108 'l'	99 'c'	111 'o'	109 'm'	101 'e'	33 '!

 想来welcome_msg的例子可以让你切身体会到x的强大之处。

x后可以跟多种修饰符

显示x的帮助信息

gdb) help x

好了,今天的主要内容就是介绍赫赫有名的x.用好x就可以让内存中的内容无所遁形。

posted @ 2013-03-29 21:30  徽沪一郎  阅读(491)  评论(0编辑  收藏  举报