IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言入门——实用调试技巧 -> 正文阅读

[C++知识库]C语言入门——实用调试技巧

目录

一、调试是什么?

二、debug和release的介绍

三、windows环境调试介绍

1、调试环境的准备

2、快捷键

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

四、一些调试实例

五、如何写出好(易于调试)的代码

1、优秀的代码

2、常用的Coding技巧

3、示范:模拟实现库函数strcpy

六、编程常见的错误


一、调试是什么?

●调试,又称除错,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。

二、debug和release的介绍

Debug通常称为调试版本,它包含调试信息,并且不做任何优化,便于程序员调试程序。

Release版本称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户可以很好的使用。

三、windows环境调试介绍

1、调试环境的准备

设置为【debug】

2、快捷键

F5:

开始调试,经常用来直接跳到下一个断点处。

F9:

创建断点和取消断点

断点:可以在程序的任意位置设置断点,这样就使得程序在想要的位置随意停止执行,继而一步步执行下去

F11:

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

F10:

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

Ctrl+F5:

开始执行不调试,直接让程序运行起来

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

【调试】——【窗口】——【断点】、【监视】、【自动窗口】、【局部变量】、【调用堆栈】、【内存】、【反汇编】、【寄存器】等

四、一些调试实例

例1:求1!+2!+3!+...+n!

int main()
{
    int i=0;
    int sum=0;
    int n=0;
    int ret=1;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        int j=0;
        for(j=1;j<=i;j++)    //代码错误,应该进行ret=1的初始化
        {
            ret*=j;
        }
        sum+=ret;
    }
    printf("%d\n",sum);
    return 0;
}

?例2:来源于《C陷阱和缺陷》

#include<stdio.h>
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;
}
//代码进入死循环
//因为数组越界,arr[12]访问到了i占用的区域

原因:

i和arr是局部变量,都放在栈区上。栈区内存的使用习惯是先使用高地址空间,再使用低地址空间。

五、如何写出好(易于调试)的代码

1、优秀的代码

●代码运行正常

●bug很少

●效率高

●可读性高

●可维护性高

●注释清晰

●文档齐全

2、常用的Coding技巧

●使用assert

●尽量使用const

●养成良好的编码风格

●添加必要注释

●避免编码陷阱

3、示范:模拟实现库函数strcpy

//原strcpy函数
#include<string.h>
int main()
{
    char arr1[20]="xxxxxxxxxx";
    char arr2[]="hello";
    strcpy(arr1,arr2);
    printf("%s\n",arr1);    //输出hello
    return 0;
}

//模拟实现
void my_strcpy(char* dest,char* src)
{
     assert(src!=NULL);   //断言,若src为空会报错
     assert(dest!=NULL);  //断言,若dest为空会报错
     while(*src!='\0')
     {  
         *dest=*src;   //也可以写成*dest++=*src++;
         dest++;
         src++;
     }
     *dest=*src;     //也可以直接赋值'\0'
}
int main()
{
    char arr1[20]="xxxxxxxxxx";
    char arr2[]="hello";
    my_strcpy(arr1,arr2);
    printf("%s\n",arr1);
    return 0;
}

const修饰指针变量时:

●const如果放在*左边,修饰的是*p,表示指针指向的内容,是不能通过指针来改变的,但是指针变量本身是可以修改的。如:const int* p=&num;

●const如放在*右边,修饰的是指针变量p,表示指针变量,不能被改变,但是指针指向内容可以被改变。如:int* const p=&num;

六、编程常见的错误

●编译错误

直接看错误提示信息就可解决问题。较简单。

●链接型错误

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

●运行时错误

借助调试,逐步定位问题。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章           查看所有文章
加:2021-12-09 11:28:26  更:2021-12-09 11:31:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:04:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码