用的繁体的visual studio 2012版本来示例。
debug设置断点的时候一定要放在实际执行的代码上(前面的灰色区域)。要确保是在debug的模式下,而不是release(这将会导致程序被重新安排)。当断点运行时,在断点处会显示黄色箭头表示运行到此处,指示当前指令所在的位置,此时按下continue按钮将会和平常一样继续执行程序。
1.F11时,没有开始执行代码,只设置函数堆栈框架,此时鼠标放在message 上会显示该变量被设置为 “hello world”。
2.再按下F12时,从main.cpp跳转到log.app,此时黄色箭头在代码前,意味着当前还没有执行该行代码。
此时再按下F10时,打印出”hello world”.
再按下F10则会回到main.cpp,箭头还在原位置,再按下则会到达下一个位置.
此时箭头虽然指向该行,但实际还并未执行这一行,即实际创建并设置变量的这行,当前调试器显示的是内存,变量目前未设置任何值,是一个未初始化的内存,但也只是显示给我们的,并不是内存实际的值。
当前版本是繁体,,最下面的autos和locals会向你展示局部变量或对自己重要的变量。最后一个watch会让我们监控变量。要查看使用的話只需要点击输入需要的再确认即可。
当程序逐步完善时,这些值将更新到内存实际存在的有内容。这时需要内存视图。在调试->windows->内存>内存1.
中间显示数据实际值,是以十六进制表示,右边是对这些数字的ASCIL解释。当我们想要知道a的实际存储在程序内存的位置时,要知道它的内存地址,可在上面输入 &a 代表地址。为什么未初始化的值为cc,意味着它是一个未初始化的堆栈内存。
这时a的值开始变化,可以设置是否为十六位显示。这四个字节(byte)的内存被设置为8,这里两个数字等于一字节(byte)。这也是为什么用十六进制数字表示,每两个十六进制数字总是对齐为一个字节内存。
运行到string这行时,它是实际内存,能看到字符串的内存地址,就是结尾为90的数字,将地址复制到watch窗口显示,会看到如下图显示内容,前面显示数字,后面则为ascil解释,为“hello”。
运行到如下时,在watch输入 ”&c” 可以看到 c 的值以及后面它对应的ascil表示。
如果一直按F10,将会一直在for循环内进行,直到结束循环后跳出。
如果我不打算直接按跳出,而是要运行完for循环再到下面,则可以再log函数前设置个断点,再点击继续。程序将运行直到下一个断点。此时将运行到显示如下内容。
一般的Debug过程就是如此。