当前位置: 首页 > news >正文

程序的调试

一名优秀的程序员也是一名出色的侦探,每一次调试都是尝试破案的过程

目录

前言

一、什么是调试?

二、调试

1.调试是什么

2.基本步骤

三、调试注意事项 

1.怎么写出易于调试的代码

 assert(断言)

const

2.常见错误

总结


前言

主要是怎么调试,调试的注意事项,调试中常见的错误和遇到的问题


一、什么是调试?

第一次发现导致计算机错误的飞鹅:bug 英语单词“昆虫”的意思

二、调试

1.调试是什么

找代码里面问题的过程

一切发生的事都有迹可循

迹象越多越容易顺滕而上 (推理)

调试就是发现并减少计算机程序中的错误


2.基本步骤

发现程序错误的存在

以隔离,消除等方法对错误进行定位

确定错误产生原因

提出纠正错误的解决办法

对程序错误改正,重新测试

基本选项了解:

debug调试

release发布版本(编译器自动优化)

IDE--集成开发环境

F5启动调试

F11逐语句(可以进入函数内部 细节)

F10逐过程

F9创建短点和取消断点(在多行程序或多文件适用),可以在程序任意位置设置断点

control+f5开始执行不调试


三、调试注意事项 

调试的时候查看程序信息

一定要先开始调试,才能看到监视窗口!

观察内存:调试>窗口>内存

指针变量的内容和地址是不一样的,指针指向一个常量或变量,指针自己也占一个空间,有自己的地址,空间里的内容是所指常量或变量的地址

如下例:

?是随机值


反汇编能看到程序翻译成的汇编代码

查看临时变量:调试时会自动更新变量的值,使用起来不是很友好

查看调用堆栈

补充知识点:

数据结构中:

队:排队,后进前出

栈:栈帧,一堆,上进上出,(汉诺塔)


栈区:局部变量

堆区

静态区

栈区的使用习惯是先使用高地址处空间


1.怎么写出易于调试的代码

代码运行正常

bug少

效率高

可读性高

可维护性高

注释清晰

文档齐全

常见的coding技巧

使用assert(断言)<assert.h>

尽量使用const

养成良好的代码风格

添加必要注释

避免编码陷阱

 assert(断言)

assert中可以放一个表达式,表达式的结果为假就报错,反之则不发生状况。可以利用assert来检测程序中的bug,如检测指针p的值是不是为null,但只能在debug环境下使用,在release中assert的报错会被自动优化。

const

const修饰一个变量时,变量被保护,不能再修改变量的值

const修饰指针时

放在*的左边,修饰指针变量指向的内容,表示指向指针的内容不能通过指针来改变了;但指针变量本身可以修改

const int *p=#

*p=10;//err

p=&n;//ok

放在*右边,修饰指针变量本身,表示指针变量本身不能被修改;但是指针指向的内容可以通过指针来改变

 int * const p=#

*p=10;/ok

p=&n;//err

2.常见错误

编译错误:直接有错误提示信息

链接错误:无法解析的外部符号

运行错误:能够调试的都是运行错误

总结

(未完待续....)


http://www.mrgr.cn/news/80106.html

相关文章:

  • 模方中Sku 模型可以转换成 Max 模型吗?
  • ubuntu wine mobaxterm找不到串口和解决方案
  • Mac Goland dlv 升级
  • 代码随想录-算法训练营-番外(图论01:图论理论基础,所有可到达的路径)
  • 图像分割数据集海洋水体船只分割数据集labelme格式6123张3类别
  • Redis 基础
  • 6.2 MapReduce工作原理
  • QT笔记- QSystemTrayIcon系统托盘功能完整示例
  • 【C++】简单计算器问题的深度解析与优化对比
  • 【Qt】信号、槽
  • ESP32-S3模组上跑通ES8388(30)
  • C++3--内联函数、auto
  • virtualbox 搭建ubuntu
  • ---mysql server: Ubuntu Linux下最最基本的操作
  • 关于睡懒觉
  • Elasticsearch 集群部署
  • Stable Diffusion Controlnet常用控制类型解析与实战课程 4
  • RabbitMQ中的Work Queues模式
  • 使用Nexus3搭建npm私有仓库
  • 八大排序算法C语言版
  • 112.【C语言】数据结构之排序(详解插入排序)
  • 在 Ubuntu 24.04.1 LTS (WSL) 中使用 openssl 生成 keybox.xml
  • 进程保活机制
  • 深度学习中的多通道卷积与偏置过程详解
  • 零知识证明:区块链隐私保护的变革力量
  • 基于wifipumpkin3的AP伪造