Debug和Release的区别
Debug:调试版本,包含调试信息且不作任何优化,方便程序员调试程序;
Release:发布版本,往往进行了优化,以便用户更好的使用;
VS调试常见快捷键
快捷键 | 含义 |
---|---|
F5 | 启动调试,用于跳至断点,鼠标右键点击断点,可以设置条件断点 |
F9 | 在选中行处创建或取消断点 |
F10 | 逐过程,常用来处理一个过程(可以是一次函数调用,或一条语句),观察循环中的细节等 |
F11 | 逐语句,F10和F11在遇到调用函数时会有区别,用F11观察函数调用语句时,会跳到函数定义处 |
CRTL+F5 | 开始执行不调试 |
VS调试窗口
只有在进入调试,才能看到这个窗口
查看变量
自动窗口:(1)自动加载程序内的变量,便于调试 (2)当进入函数内部后,该窗口只会显示函数内部的变量;
局部变量:和自动窗口类似;
监视:(1)手动添加想要查看变量 (2)当进入函数内部后,该窗口仍会显示函数外部的变量 (3)可以输入合法的表达式(例如:a+10,a为变量);
监视窗口在传参时的用法:
查看内存
内存:
查看调用堆栈
查看汇编信息
反汇编:
查看寄存器
寄存器:
监视:输入寄存器的名字;
如何写出易于调试的代码
常见coding技巧
- 使用assert
- 尽量使用const
- 养成良好的代码风格
- 添加必要的注释
- 避免编码的陷阱
示例
# include <assert.h>
char* my_strcpy(char* dest, const char* src) // 返回类型为char*,便于其返回值被其他直接引用;返回目标空间的首地址
{
char* ret = dest;
assert(src != NULL);
assert(dest != NULL);
while(*dest++ = *src++);
return ret;
}
const的作用:
- const 修饰变量,变量不能通过赋值被改变,但可以通过地址来改变
- const 修饰指针变量
a. const 放在*号左边,如const int * p = &num;,表示p指向的对象不能通过p来改变,但是p变量本身的值可以改变(指向不同的变量);
b. const 放在 *号右边,如int * const p = &num;表示p指向的对象可以通过p来改变,但是p变量本身的值不能被改变;
c. const也可以同时放在 *号左右边;
编程错误类型
编译型错误(语法错误);
链接型错误;
运行时错误;