全媒体网站的建设方案外包如何加工资
- 作者: 五速梦信息网
- 时间: 2026年03月21日 09:53
当前位置: 首页 > news >正文
全媒体网站的建设方案,外包如何加工资,网站制作方案报价,网站建设项目组工作总结目录什么是bug?调试是什么#xff1f;有多重要#xff1f;debug和release的介绍windows环境调试介绍、一些调试实例如何写出#xff08;易于调试#xff09;的代码编程常见的错误什么是bug?其实bug在英文翻译中有表示臭虫的含义#xff0c;因为第一次被发现的导致计算机…目录什么是bug?调试是什么有多重要debug和release的介绍windows环境调试介绍、一些调试实例如何写出易于调试的代码编程常见的错误什么是bug?其实bug在英文翻译中有表示臭虫的含义因为第一次被发现的导致计算机程序错误的是飞蛾也是第一个计算机程序错误。调试是什么有多重要写代码就是破案的过程错误都是有迹可循的。迹象越多就越容易顺藤而上这就是推理的途径。发现错误–调试–解决错误2.1调试的基本步骤发现程序错误的所在以隔离、消除等方式对错误进行定位确定错误产生的原因提出错误的解决办法对程序错误予以改正、重新测试Debug和release的介绍掌握Debug通常称为调试版本它包含调试信息并且不做任何优化便于程序员调试。Release称为发布版本它往往是进行了各种优化使得程序在代码大小和运行速度上都是最优的以便于用户很好的使用。Debug和Release的区别就是Release的速度更快所占的内存更少但是Release不能调试Debug可以进行调试。windows环境调试介绍3.1调试环境的准备在环境中选择debug选项才能使代码正常调试。3.2调试快捷键1.F5 - 开始调试2.ctrl F5 开始执行不调试3.F9 设置断点/取消断点4.F10 逐过程5.F11 逐语句使用Fn辅助功能键F10和F11有什么区别呢他们在执行的过程F10是逐过程进行的F11是逐语句进行的所以在函数的调用时F11可以更加细节的进入到函数的内部进行逐语句的调试。F5是和F9配合使用的F9是设置断点F5是开始执行并跳到第一个断点举例光标放到16行按FnF9我们就在16行加了一个断点意思是F5开始调试直到断点处停止调试。按F5开始调试得到了我们的程序执行结果在以上的基础上继续按F5开始调试结果会是什么样的呢在循环里面的断点每次循环都会继续停到断点处。抛开上面我们所说的依然是下面的程序如果循环的次数很大达到几百上千时而我们的错误刚好在第400次循环时该怎么办呢在VS编译器中我们也可以设置断点。如果我们不明白条件断点我们也可以在代码中加上一条条件语句之后将断点打在条件语句处如果满足条件则断点被触发。3.3调试时查看当前程序的信息如果我们想在调试过程中观察i的值点击调试-窗口-自动窗口在我们按F10进行逐过程调试时自动窗口会自动的显示我们在这个过程中当前程序的信息。如果我们想在调试过程中观察程序的局部变量的变化点击调试-窗口-局部变量如果我们想在调试过程中监视任何变量点击调试-窗口-监视监视不仅可以监视变量的值也可以监视变量的地址表达式的值内存调用堆栈就是数据结构里面的栈。反映数据的调用逻辑。调试实例求12……10int main() {int n 0;int sum 0;scanf(%d, n);int ret 1;for (n 1; n 10; n){for (int i 1; i n; i){ret * i;}sum ret;}for (int i 1; i n; i){ret * i;}printf(%d\n, sum);return 0; }经过计算我们发现我们的代码是错误的错误在于我们每一次循环没有及时修改ret的值为1。但是如果我们不能一眼看出来错误在哪里还是要依据调试来解决问题的。1.在监视窗口中添加我们想要监视的变量2.F11逐语句并且观察监视窗口中变量的值。我们在调试的过程中发现ret在执行过程中继续进行阶乘运算时初始值不是1这就是我们通过调试发现的问题所在经过修改代码如下int main() {int n 0;int sum 0;//scanf(%d, n);int ret 1;int i 0;for (n 1; n 10; n){ret 1;for (int i 1; i n; i){ret * i;}sum ret;}for (int i 1; i n; i){ret * i;}printf(%d\n, sum);return 0; }如何写出易于调试的代码代码运行正常bug很少效率高可读性高可维护性高注释清晰文档齐全常见coding技巧使用assert尽量使用const养成良好的编码风格添加必要的注释避免编码的陷阱示例模拟实现strcpy函数void my_strcpy(char* dest, char* scr) {while (*scr ! \0){*dest *scr;dest;scr;}*dest scr;//\0‘的拷贝 } int main() {char arr1[20] hello world;char arr2[40] { 0 };my_strcpy(arr2, arr1);printf(%s\n, arr2);return 0; }但是在我们看来这样的代码并不是一个好的代码我们可以继续将代码进行优化。my_strcpy函数部分我们可以将它改为以下形式void my_strcpy(char dest, char* scr) {while (*scr ! \0){*dest *scr;//dest;//scr;}*dest scr;//\0‘的拷贝 }除了上述的代码形式外我们还可以将代码改为以下形式void my_strcpy(char dest, char* scr) {while (*dest scr){;}} int main() {char arr1[20] hello world;char arr2[40] { 0 };my_strcpy(arr2, arr1);printf(%s\n, arr2);return 0; }但是我们在传递参数的时候不能够保证我们传递过来的指针是否为空指针也不能保证指针的有效性所以在这个时候我们就要使用assert断言来保证指针的有效性。为什么使用assert断言?如果在传参的这个过程中我们真的传递了一个空指针或者说是一个无效的指针那么使用断言就会提示我们这样的问题所在但是如果你没有使用断言来判断指针的有效性整个程序运行起来的最终结果就会崩掉并且同时我们也不会知道它为什么会运行失败。#include assert.h void my_strcpy(char dest, char* scr) {//assert(dest ! NULL);//assert(scr ! NULL);assert(dest scr);while (*dest *scr){;}} int main() {char arr1[20] hello world;char arr2[40] { 0 };my_strcpy(arr2, arr1);printf(%s\n, arr2);return 0; }当然断言不仅仅是应用于指针的判断断言是依据assert后面表达式真假而言的。对于我们程序员来讲是一个很好的编程习惯。other:我们在C语言的库中发现strcpy函数和我们自己写的my_strcpy函数有所出入。详细请看下图使用const修饰和不使用const又有什么区别呢const修饰指针的作用const放在的左面const int p或者int const* pconst放在*的左面限制的是*p而不是p。p不能改是p指向的内容但是p可以改p可以指向其他变量int main() {const int m 0;int n 0;//m 20;errconst int p m;//*p 20;错误p n;//okreturn 0; }const放在的右面int const p ,如果const放在*右边限制的是p而不是*pp可以改p不可以改。int main() {int m 0;int n 0;int const p m;p 20;//okp n;//noreturn 0; }在我们strcpy中是如何使用的呢如果我们将源头和目的地写反就出现了一个bug这个时候使用const修饰char scr就可以避免这个错误。提高了代码的健壮性。#include assert.h void my_strcpy(char* dest, const char* scr)//意思是*scr不能被改变 {//assert(dest ! NULL);//assert(scr ! NULL);assert(dest scr);while (*dest scr){;}} int main() {char arr1[20] hello world;char arr2[40] { 0 };my_strcpy(arr2, arr1);printf(%s\n, arr2);return 0; }#include assert.h char my_strcpy(char* dest, const char* scr)//意思是scr不能被改变 {//strcpy函数返回的是目标空间的起始地址assert(dest scr);char ret dest;//记住起始空间的地址while (*dest *scr){; }return ret; } int main() {char arr1[20] hello world;char arr2[40] { 0 };//链式访问printf(%s\n, my_strcpy(arr2, arr1));return 0; }编程常见的错误6.1编译型错误例如缺少分号等语法错误可以直接查看错误信息解决问题。6.2链接型错误例如拼写错误或者标识符不存在提示有无法解析的外部命令。主要在代码中找到错误信息的标识符然后定位问题所在。ctrlf–搜索6.3运行时错误借助调试逐步定位问题。感谢阅读欢迎大家批评指正
- 上一篇: 全景网站制作教程游戏制作软件app手机下载
- 下一篇: 全民建站wordpress网页布局
相关文章
-
全景网站制作教程游戏制作软件app手机下载
全景网站制作教程游戏制作软件app手机下载
- 技术栈
- 2026年03月21日
-
全国最好网站建设wordpress微信电子书插件
全国最好网站建设wordpress微信电子书插件
- 技术栈
- 2026年03月21日
-
全国招商代理项目企业网站seo分析
全国招商代理项目企业网站seo分析
- 技术栈
- 2026年03月21日
-
全民建站wordpress网页布局
全民建站wordpress网页布局
- 技术栈
- 2026年03月21日
-
全民建站成都网站建设公司 四川冠辰科技
全民建站成都网站建设公司 四川冠辰科技
- 技术栈
- 2026年03月21日
-
全能网站建设pdf动画视频制作软件app
全能网站建设pdf动画视频制作软件app
- 技术栈
- 2026年03月21日






