Mac下用lldb调试C程序

前不久在幕客网上面学习Linux C语言的基础,老师使用的是vim编辑器,所用的调试工具为gdb,而我发现我的Mac上面却找不到它,后来百度了一下,原来Mac中现在使用的是gdb的升级版lldb

这里写图片描述

废话不多说,直接上干货!代码如下:

#include<stdio.h>
int main(){
    int a=4;
    int b=6;
    int array[3];
    array[0]=1;
    array[1]=10;
    array[2]=100;
    int *p;
    p=&a;
    int i=0;
    while(i<6){
        printf("*p=%d\n",*p);
        p++;
        i++;
    }
    return 0;
}

由于代码之前已经写好,即main.c文件,所以直接输入lldb ./main进行调试
这里写图片描述

1.设置断点,并开始调试
这里写图片描述
2.进行单步调试,输入next,或缩写n,我这里一直按n,直到进入while循环
这里写图片描述
3.查看内存里面的值,利用print 变量(或缩写为p) 如:p a
这里写图片描述
由于代码中有:p = &a;于是指针p的值为:0x00007fff5fbffb74,与变量a的地址一样;
其实变量的本质就是内存,而指针的本质就是地址。 这个命令:p &p,其实就是显示指针p的地址,即指针p的值存放的内存地址,&p也就是二级指针。
4.批量显示内存的值,使用x命令:
这里写图片描述
此处查看的是变量i的地址,由于之前已经探索过,直接写出来了,一直进行单步调试,进入第二次循环
此时,i的值变从0变为1
这里写图片描述
C语言在内存中分为代码段,数据段,堆,栈,代码中的所有局部变量都会存放在栈中,即在内存的高地址处,我们显示从0x00007fff5fbffb64地址开始的一连串地址的值,就会发现这些值基本上是存放在一起的:
这里写图片描述
其中9表示显示9个地址值,d表示以十进制显示值,w表示4个字节为一个单位,下面显示了所有变量的值,包括a,b,i,array[0],array[1],array[2],当然程序中循环输出的六个值并不完全包括上面的这6个变量,我们可以看到,它们在内存中的位置并不是按照声明的顺序连续的,有编译器处理过的原因

0x7fff5fbffb64: 0                     (i)

0x7fff5fbffb68: 1606417268

0x7fff5fbffb6c: 32767

0x7fff5fbffb70: 6                      (b)

0x7fff5fbffb74: 4 (a)

0x7fff5fbffb78: 0 0x7fff5fbffb7c: 1 (array[0]) 0x7fff5fbffb80: 10 (array[1]) 0x7fff5fbffb84: 100 (array[2])

猜你喜欢

转载自blog.csdn.net/qxconverse/article/details/77528097