C语言中基于VS环境的实用调试技巧

实用调试技巧
1.什么是bug
2.调试是什么?,有多么重要?
3.debug和release的介绍。
4.windows环境调试介绍。
5.一些调试的实例。
6.如何写出好/易于调试的代码?
7.编程常见的错误。

什么是bug
bug(臭虫)
第一次被发现的导致计算机错误的飞蛾,也是第一个计算机程序错误

调试是什么?有多重要?
所有发生的事情都一定有迹可循,如果问心无愧,就不需要掩埋也就没有迹象了,如果问心有愧,就比须需要掩埋,那就一定会有迹象,迹象越多越容易顺藤而上,这就是推理的途径,顺着这条途径顺流而下,就是犯罪,逆流而上就,就是真相。
一名优秀的程序员是一名优秀的侦探
每一次调试都是一次尝试破案的过程
调试是什么?
调试(Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。
调试的基本步骤:
1.发现程序错误的存在
2.以隔离,消除等方式对错误进行定位
3.确定错误产生的原因
4.提出纠正错误的解决方法
5.对程序错误予以改正,重新测试

Debug和realease的介绍
Debug通常称为调试版本,它包含调试信息,并且不做任何优化,便于程序员调试。
Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好使用。
test.c                           可执行程序
Debug                        Debug版本的可执行程序-----------------包含调试的信息:如监视等;
Release                       Release版本的可执行程序---------------是给软件测试测试的版本;

VS环境下的快捷键,最常使用的几个快捷键:
F5:启动调试,经常用来直接调到下一个断点处。
F9:创建断点和取消断点,断点的重要作用:可以在程序的任意位置设置断点,这样就可以使得程序在想要的位置,随意停止执行,继而一步步执行下去。
F10:  逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,也可以是一条语句,
F11:逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最常用的);
CRTL+F5:开始执行不调试,如果你想让程序直接运行起来而不用调试就可以直接使用;

多多动手,尝试调试,才能有进步。
1.一定要    熟练掌握调试技巧
2.初学者可能80%的时间在写代码,20%的时间在调试。但是一个程序员可能20%的时间在写程序,80%的时间都在调试。
3.我们所讲的都是一些简单的调试。以后可能会出现很多复杂调试场景;多线程程序的调试等。
4.多多使用快捷键,提高效率;

如何写出一个好(易于调试)的代码
优秀的代码:
1.代码运行正常
2.bug很少
3.效率高
4.可读性高
5.可维护性高
6.注释清晰
7.文档齐全
常见的coding技巧
1.使用assert
2.尽量使用const
3.养成良好的编码分格
4.添加必要的注释
5.避免编码的陷阱
举个例子:
//void my_strcpy(char* dest, char* src)
//{
//    while (*src != '\0')
//    {
//        *dest = *src;
//        dest++;
//        src++;
//    }
//    *dest = *src;//这里把'\0'拷贝过来;
//}
void my_strcpy(char* dest, const char* src)//这里使用const的原因是万一把src与dest的位置写反了,而src不可修改,就会报错出来;
{
    assert(dest != NULL);
    assert(src != NULL);//这里使用断言指令当它不满足这个条件时什么都不会发生,满足后就会报错;
    while (*dest++ = *src++)//这里先调换然后再加加当=\0时那么就为假跳出循环
    {
        ;
    }
}
int main()
{
    char arr1[] = "####################";
    char arr2[] = "bit";
    //strcpy(arr1, arr2);//这里会把/0也打印过来所以只会打印bit;我们自己写一个函数;
    my_strcpy(arr1, arr2);
    printf("%s", arr1);
    return 0;
}
对const在指针里使用技巧:
int main()
{
    int num = 10;
    const int* p = #//int *const p = #
    //const放在指针变量的*左边时,修饰的是*p,也就是说:不能通过p来改变*p(num)的值;
    //const放在指针变量的右边时,修饰的时指针变量p本身,p不能被改变了;
    return 0;
}
再举个例子:用刚刚更安全的方法实现stlen函数的实现
int my_strlen(const char* arr)
{
    int count = 0;
    assert(arr != NULL);
    while (*arr != '\0')
    {
        count++;
        arr++;
    }
    return count;
}
int main()
{
    char arr[] = "abcde";
    int len = my_strlen(arr);
    printf("%d", len);
    return 0;
}
编程常见的错误:
常见的错误分类:
1.编译型错误:
直接查看错误提示信息(双击),解决问题。或凭借经验就可以搞定。相对来说简单。
2.链接型错误:
看错误提示信息,主要再代码中找到错误信息中的标识符,然后定位问题所在,一般是标识符名不存在或者拼写错误。
3.运行时错误:
借助调试,逐步定位问题,最难搞。
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值