实用调试技巧(下)

简介: 实用调试技巧

4.windows环境调试介绍

4.1调试环境的准备

在环境中选择 debug选项,才能使代码正常调试

4.2学会快捷键

最常使用的几个快捷键:

F5

  • 启动调试,经常用来直接跳到下一个断点处

F9

  • 创建断点和取消断点
  • 断点的重要作用,可以在程序的任意位置设置断点
  • 这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去

F10

  • 逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句

F11

  • 逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部

CTRL + F5

  • 开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用

在笔记本电脑上可以配合使用FN

4.3调试的时候查看程序当前信息

1.查看临时变量的值

在调试开始之后,用于观察变量的值

2.查看内存信息

在调试开始之后,用于观察内存信息

3.查看调用堆栈

通过调用堆栈,可以清晰的反映函数的调用关系以及当前调用所处的位置

4.查看汇编信息

5.查看寄存器信息

可以查看当前运行环境的寄存器的使用信息

5.多多动手,尝试调试,才能进步

  • 一定要熟练掌握调试技巧
  • 初学者可能80%的时间在写代码,20%的时间在调试。但是一个程序员可能20%的时间在写程序,但是80%的时间在调试。
  • 我们所讲的都是一些简单的调试。
  • 以后可能会出现很复杂调试场景:多线程程序的调试等
  • 多多使用快捷键,提升效率

6.如何写出好(易于调试)的代码

  1. 代码运行正常
  2. bug很少
  3. 效率高
  4. 可读性高
  5. 可维护性高
  6. 注释清晰
  7. 文档齐全

常见的coding技巧

  1. 使用assert(断言)
  2. 尽量使用const
  3. 养成良好的编码风格
  4. 添加必要的注释
  5. 避免编码的陷阱

assert

assert函数是C语言标准库<assert.h>中的一个函数,函数原型为:

  voidassert(int expression)

该函数输入参数只有一个int类型参数,返回值为void类型

assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行

用法总结与注意事项

  1. 在函数开始处检验传入参数的合法性
  2. 每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败
  3. 不能使用改变环境的语句,因为assert只在Debug中生效,如果这么做,会使用程序在真正运行时遇到问题
  4. assert和后面的语句应空一行,以形成逻辑和视觉上的一致感
  5. 有的地方,assert不能代替条件过滤

const

常量指针

常量指针是指针指向的内容是常量,可以有以下两种定义方式

const int* n;
int const* n;

常量指针说的是不能通过这个指针改变变量的值,但是可以通过其他的引用来改变变量的值

int a=5;
const int* n=&a;
a=6;

常量指针指向的值不能改变,但是这并不意味着指针本身不能改变,常量指针可以指向其他的地址

int a=5;
int b=6;
const int* n=&a;
n=&b;

指针常量

指针常量是指指针本身是个常量,不能再指向其他的地址,写法如下

int*const n;

需要注意的是,指针常量指向的地址不能改变,但是地址中保存的数值是可以改变的,可以通过其他指向改地址的指针来修改

int a=5;
int*p=&a;
int* const n=&a;
*p=8;

区分常量指针和指针常量

区分常量指针和指针常量的关键就在于星号(*)的位置,我们以星号为分界线

  • 如果const在星号的左边,则为常量指针
  • 如果const在星号的右边,则为指针常量

如果我们将星号读作"指针",将const读作‘常量'的话,内容正好符合。

  • int const * n;是常量指针
  • int * const n;是指针常量

7.编程常见的错误

7.1编译型错误

直接看错误提示信息(双击),解决问题,或者凭借经验就可以搞定

7.2链接型错误

看错误提示信息,主要再代码中找到错误信息中的标识符,然后定位问题所在

一般是标识符名不存在或者拼写错误

7.3运行时错误

借助调试,逐步定位问题

相关文章
|
7月前
|
程序员
调试技巧vs2022
调试技巧vs2022
|
7月前
|
C++
VS调试技巧
VS调试技巧
38 0
|
4月前
|
JavaScript 前端开发
调试技巧
【8月更文挑战第28天】
54 9
|
6月前
|
NoSQL 程序员 Linux
实用调试技巧(1)
实用调试技巧(1)
50 7
|
安全 程序员 Windows
实用调试技巧
实用调试技巧
90 0
5 个非常实用的 vs 调试技巧
5 个非常实用的 vs 调试技巧
|
程序员 编译器
【机房重构】VS2012 调试
【机房重构】VS2012 调试
75 0
|
程序员 编译器