确保在Debug模式下而不是Release
打断点(break point)
直接在有代码的行前单击,会出现红色的点(再次单击会取消);或者光标停留在某行,按F9
这意味着程序当执行到这一行时会终止
在打完断点后点击”本地Windows调试器“或者按F5
往下翻会有代码供测试
界面如下:
在工具栏有这样三个操作
- 逐语句(step into):步入进函数,看看这个函数做了什么——F11
- 逐过程(step over):从当前函数跳到下一行代码——F10
- 跳出(step out):跳出当前函数,回到调用这个函数的位置——Shift+F11
测试代码:
#include<iostream>
using namespace std;
int main() {int a = 8;a++;const char* string = "Hello";for (int i = 0; i < 5; i++) {const char c = string[i];cout << c << endl;}cout << "Hello World" << endl;
}
首先我们来看a的值,显示10016,你可能会疑惑:为什么是10016?为什么不是10086? 为什么不是8?
这是因为虽然箭头此时指向这条语句,但并不意味着已经运行了这行代码;而是我们正要运行它
所以调试器显示的是:a将要被设置的内存位置的数字
我们没有把这个变量设置成任何东西,它只是未初始化的内存
看到这里你就明白了为什么你的a的值既不是8也不是10016
内存视图(memory view)
- 调试->窗口->内存->内存1
- Debug->windows->memory->memory1
输入&a 就被带到变量a的内存地址
按F10后我们可以观察到a的值变为了8(局部变量/自动窗口)
四个字节的内存也被设置为8(内存1): 08 00 00 00
再按F10,a变为了9
再按F10,string也发生了变化。前面的是它的地址,
将其复制到内存1中查找:48 65 6c 6c 6f ;这是ASCII码,翻译过来就是Hello
如果你不想一个个按F10,而是让程序接着运行到某一句,就在那一句前打断点,按F5或continue
另外,你还可以右键->转到反汇编,来查看CPU指令
以上就是全部内容,希望你能很好的应用Debug
视频:https://www.youtube.com/watch?v=0ebzPwixrJA