一、常规断点调试
F9:光标到某一行,按F9可以给该行设置断点,或者取消断点;
F5:执行程序到第一个断点停下;
F10:逐过程,一行行执行,但是函数那些算一块执行;
F11:逐语句,可进入函数一行行执行;
Shift + F11:可跳出当前的函数
二、调试时查看内存
一个很简单的指针常量栗子:
#include <iostream> using namespace std; int main(){ int a = 3; int m[2] = { 1, 2 }; int *const c = &a;//指针常量 cout << "c的(值):" << c << " " << "c指针指向的值:" << *c << endl; c[0]=m[0];//改变地址的内容是合法的 cout << "c的(值):" << c << " " << "c指针指向的值:" << *c << endl; system("pause"); }
用F9在第七行设置断点后,按F5运行,执行到断点处(该行还没执行),按Alt + 6或者选择:调试,窗口,内存,内存1 的命令就能查看内存:
在左上角的“地址”右边的编辑框中输入& + 想查看的变量就能查看该变量的地址存放的值,即该变量的值,这里我们输入&m后得到:
上面显示的0x00AFFD5C即这个m数组的首地址,分成3部分:
左侧部分是m的地址和附近的内存地址;
中间部分是该内存中存放的数(PS:但是是以十六进制进行保存,即VS将这些二进制数据以16进制保存,4位二进制表示一位16进制数);
右侧部分是内存中16进制数所代表的一些字符,有些可显示字符会显示出来,对于不可显示的字符就用.来代替。
比如如下程序safasdfa\0def
的内存,a对应的16进制数为61(十六进制的61即十进制的97,即a字符对应的ASCII码),s对应的是73:
string str = "safasdfa\0def"; cout << str << endl;
三、快速监视窗口
shift + F9:当程序运行到断点处,按这个键能出现快速监视窗口,如下所示,查看m
对应的值和类型:
如果查看a
的值:
查看a
的地址,输入&a
: