当前位置:C++技术网 > 资讯 > C++调试技巧:如何查看变量的内存数据

C++调试技巧:如何查看变量的内存数据

更新时间:2017-04-19 10:26:42浏览次数:1+次

    查看变量的内存数据,是程序员进阶需要知道的。在跟踪变量的数据变化的时候,能够直观的看到内存数据,可以大大提高调试的效率。但是很多程序员并不会,所以今天就专门来讲讲。
    我们使用VS2010来讲,以上版本都有查看内存的功能。需要说明的一点,查看变量内存,是需要程序进入调试运行状态才有的。因为只有程序运行起来了,才有查看内存的说法。如果程序都没有运行,程序都不在内存里,那还怎么查看?
    我们在对应的地方打上断点,如下图所示:
    

        C++调试技巧:如何查看变量的内存数据     

    

            然后启动调试运行(F5),程序停在了断点处。如下如所示:     

    

        C++调试技巧:如何查看变量的内存数据     

    

            点击菜单:调试->窗口->内存->内存1(1-4随便选择一个都可以),然后会弹出下面查看内存数据的窗口界面:     

    

        查看内存数据的窗口界面     

    

            查看变量的内存数据的方法:     

    

        1.如果是变量,使用取地址符得到内存地址,或者直接输入内存地址。如&a。然后回车即可。效果如下图所示:     

    

        输入&a后回车,自动计算并显示了地址值,然后显示了这个地址开始的内存数据     

    

        【输入&a后回车,自动计算并显示了地址值,然后显示了这个地址开始的内存数据】     

    

            因为a是int类型,因此a是占4个字节(32位系统,如果不确定,可以用sizeof(int)查看占用的字节数)。那么上图显示的内存数据,最开始的cc cc cc cc就是a的内存数据了。因为现在还没有初始化a变量,所以内存数据是cc cc cc cc 。如果你查看其它变量,自然也是这样。     

    

            使用单步执行(F10),让a的初始化赋值语句     

    

        int a=10;     

    

            执行。此时赋值被执行了。下面的内存窗口也发生了变化,如下图所示:     

    

        内存数据被修改了     

    

        【内存数据被修改了】     

    

            可以看到,单步执行的箭头往下挪了一句,这样表示上一句已经被执行了。这样a就初始化了。此时的a的值就是100了。自然,a的内存数据就是100了。我们看到下面的内存数据窗口显示的数据,有几个字的颜色和其他的不一样了,数据变为64 00 00 00 。这是十六进制的数值显示。这里的内存数据显示是低字节在前,高字节在后。int变量占用4个字节,左边的是低字节,右边是高字节。所以如果我们要将这个数据转为人类阅读的方式,那么就要处理一下,将高字节放在左边,低字节放在右边,连起来。如00 00 00 64.高字节的0直接忽略,所以只需要看64就知道数值是100了。     

    

        2.如果是数组或指针或地址,那么直接输入回车即可。因为数组名本来就代表了数组的起始地址。指针更不用说。那么上面的代码的name和msg,我们都是直接输入名称回车即可。     

    

            字符串会在右侧自动翻译出来字符显示。左边是十六进制数据,右边是对应的字符。如果数值在ASCII编码值内,右侧就可以显示对应的字符,如果不在ASCII编码值内,右侧就是乱码。字符翻译显示对字符串和字符是有意义的,对于非字符则没有意义。如下图所示:     

    

        查看字符串数据     

    

            我们可以看到,字符串是单字节字符序列。这里就没有高字节低字节的说法了。一个字节就是一个字符,从左到右依次串起来。所以我们看到msg字符数组的十六进制数据和右侧的字符,一目了然。     

    

            可以说,经常查看内存数据,可以让你对变量的内存数据变化有更直观的了解,可以加深理解。这个在实际项目调试时经常会用到,非常实用的功能。在监视器里显示的数值,只是一个快捷的跟踪。很多复杂的调试跟踪,还得看内存数据窗口。