关于调试的应用场景及如何编写优秀代码

简介: 关于调试的应用场景及如何编写优秀代码
  • 通过调试我们可以知道代码编写错误的原因。
  • 我们不断积累经验,就能够避免很多错误。

调试的应用场景

关于数组越界的计算机错误:(vs2020,X86,Debug环境下进行)

int main()
{
  int i = 0;
  int arr[10] = {1,2,3,4,5,6,7,8,9,10};
  for (i = 0; i <= 12; i++)
  {
    arr[i] = 0;
    printf("hehe\n");
  }
  return 0;
}

结果就是死循环,不断地打印hehe。

接下来,我们调试,分析原因:

之后我们发现arr12的值与i的值一样变化。


数组越界并没有报错


接下来,我为大家分析这个数组越界导致无限循环的原理:

  • 内存分为栈区,堆区和静态区
  • 我们的局部变量储存在栈区中
  • 局部变量就是main函数里面的变量(也就是 i 和 arr[ i ] )


  • 1. 栈区内存的使⽤习惯是从⾼地址向低地址使⽤的,所以变量i的地址是较⼤的。arr数组的地址整体是⼩于i的地址。
  • 2. 数组在内存中的存放是:随着下标的增⻓,地址是由低到⾼变化的。
  • (这两句话非常重要,需要理解一下)


  • 数组越界的arr[12] 由于会与 i 的地址重合,因此当arr[12]=0时,i 也会同时变为0。
  • 最后导致无限循环。


优秀的代码

  • 代码运行正常
  • bug很少
  • 效率高
  • 可读性高
  • 可维护性高
  • 注释清晰
  • 文档齐全

错误分类

1.编译型错误

编译型错误⼀般都是语法错误,这类错误⼀般看错误信息就能找到⼀些蛛丝⻢迹的,双击错误信息也能初步的跳转到代码错误的地⽅或者附近。编译错误,随着语⾔的熟练掌握,会越来越少,也容易解决。


2.链接型错误

  • 标识符名不存在
  • 拼写错误
  • 头文件没包含
  • 引用的库不存在


3.运行时错误

  • 运行时的错误是最经常发生的,我们常常无法避免这种情况。
  • 但是我们可以通过不断地调试,找到错误的原因,减少这种情况。

如何写出优秀的代码

  • 积累经验。我们日常不断地积累,知道代码问题,分析原理之后,减少错误代码。

通过coding技巧减少运行时错误的发生

1.assert(断言)

  • 用法:assert(表达式)
  • 如果assert中的表达式为假,那么assert就会报错。
  • 避免运行时错误。

这里可以判断arr是不是为空指针。

判断a是否大于b。

  • 我们之后的代码会越来越复杂,assert可以保证我们代码的正确,assert也可以帮助我们找到代码错误的位置。
  • 在运行之前,就能报错,避免运行时错误。(运行时错误就是结果错误,需要我们一步一步去调试才能发现)

2.const

const放在 * 的左边

 const int*p
=int const* p
int main()
{
    int a = 10;
    int p = &a;
    const int* p=0;
    *p = 20;//这个表达式不可以运行。
}

p指向的对象不能通过p来改变,

但是p变量本身的值可以改变。

const放在 * 的右边

int* const p
int main()
{
int a = 10;
int b = 0;
int p = &a;
int* const p=0;
    p = &b;   //这个表达式不可以运行。
}

p本身的值不可以改变,但是p指向的对象可以改变。

我们可以通过const来控制一些变量的是否改变。

目录
相关文章
|
前端开发 Java
前端基础 - 常用调试方式
前端基础 - 常用调试方式
75 0
|
2月前
|
SQL Arthas 监控
看大神如何使用3行代码提升接口性能
看大神如何使用3行代码提升接口性能
27 0
|
4月前
R语言错误处理与调试:如何高效调试R代码
【8月更文挑战第28天】调试R代码是一项需要不断练习和提高的技能。通过理解常见的错误类型、使用`traceback()`查看错误路径、逐步执行代码、利用`tryCatch()`捕获和处理错误、设置更严格的警告级别、利用RStudio的调试工具以及编写可复现的示例,你可以更加高效地调试R代码,并快速解决遇到的问题。
|
6月前
|
数据库连接 开发工具 数据库
逆向学习 SDK 篇:通过封装来简化代码编写,提高代码复用性
逆向学习 SDK 篇:通过封装来简化代码编写,提高代码复用性
36 0
|
7月前
|
Java 测试技术 API
Python的api自动测试选择合适的测试框架
【4月更文挑战第18天】在Python API自动测试中,选择合适的框架至关重要。常见的测试工具有unittest(集成度高,适合基础测试)、pytest(功能强大,支持插件扩展和高级功能)、requests-mock(用于HTTP请求模拟和断言)、rest-assured(针对RESTful API的简洁测试)以及allure-pytest(生成美观的测试报告)。选择时要考虑项目需求、团队熟悉度和社区支持。确保遵循良好测试实践,编写清晰、全面的测试用例。
96 2
|
7月前
|
程序员 编译器 C语言
编程最重要的技术之一 — 调试(以C语言代码为例)
编程最重要的技术之一 — 调试(以C语言代码为例)
128 0
|
7月前
|
IDE Linux 开发工具
Python语言的编写和运行代码
Python语言的编写和运行代码
152 1
|
程序员 C语言 C++
编程最重要的技术—调试(以C语言代码为例)
编程最重要的技术—调试(以C语言代码为例)
|
安全 测试技术 API
python接口自动化(一)--什么是接口、接口优势、类型(详解)
经常听别人说接口测试,接口测试自动化,但是你对接口,有多少了解和认识,知道什么是接口吗?它是用来做什么的,测试时候要注意什么?坦白的说,笔者之前也不是很清楚。接下来先看一下接口的定义。
228 0
python接口自动化(一)--什么是接口、接口优势、类型(详解)
|
JSON 测试技术 数据格式
接口测试平台代码实现33:接口调试
接口测试平台代码实现33:接口调试
接口测试平台代码实现33:接口调试
下一篇
DataWorks