• 第十章:C语言的调试


            很多小伙伴刚开始听到C语言的调试,这是个啥,表示很怀疑,敲代码不就是直接就是干嘛,结果很多小白们,一运行错误多的数都数不过来。就开始这改改,那删删,莫名奇妙就运行成功了。到最后都不知道到底那错了。有一种小朋友是否有多问号的感觉。可想而知代码调试有多么重要,一个正真的大佬,20%在敲代码,80%在调试代码。咱们不扯别的,直接进入今天的主题--C语言调试

     

     一:bug

     

     

          在 Mark II 计算机上工作时电脑不能正常运作了,霍普和整个团队都搞不清楚为什么。后来才发现,是一只飞蛾意外飞入了一台电脑内部而引起的故障。终于把问题解除了,霍普在日记本中记录下了这一事件。

    二:调试的重要性

     ①调试的步骤

    1.发现程序错误的存

    2.以隔离、消除等方式对错误进行定位
    3.确定错误产生的原因
    4.提出纠正错误的解决办法
    5.对程序错误予以改正,重新测试

    ②Debug和Release的介绍

    Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
    Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

    三:Windows环境调试介绍

    ①准备调试(要在Debug环境下才可以调试)

     ②学会快捷键

    • F5:启动调试,经常用来直接跳到下一个断点处。(在循环中跳到逻辑上的断点)

    • F9:创建断点和取消断点。

          断点的重要作用,可以在程序的任意位置设置断点。

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

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

    • F11:逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑

          进入函数内部(这是最常用的)。

    • CTRL+F5:开始执行不调试。

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

    1.查看临时变量的值

    2.查看内存信息 

     3.查看调用堆栈

     四:编程常见的错误

    1编译型错误
    2链接型错误(无法解析的外部命令)
    3运行时错误逻移出现问题

    五:采用相关代码来减少bug

    1.const关键字(const的作用可以避免无意中由于修改数据造成的编程错误。)

    2.const修饰指针变量的作用

     3.例子(模拟实现库函数:strcpy)

    1. //模拟实现库函数:strcpy
    2. #include
    3. #include
    4. char* my_strcpy(char* dest, const char * src)
    5. {
    6. char* ret = dest;
    7. assert(dest != NULL);//断言防止空指针
    8. assert( src != NULL);//断言防止空指针
    9. //1.第一种写法
    10. //while (*dest++ = *src++)
    11. // ;
    12. //2.第二种写法
    13. while (*src != '\0')
    14. {
    15. *dest = *src;
    16. dest++;
    17. src++;
    18. }
    19. *dest = *src;// \0 的拷贝
    20. return ret;
    21. }
    22. int main()
    23. {
    24. //初始化
    25. char arr1[] = "hello bit";
    26. char arr2[20] = "xxxxxxxxxxxxx";
    27. char* p = NULL;
    28. //调用函数
    29. my_strcpy(arr2, arr1);
    30. //打印arr2
    31. printf("%s\n", my_strcpy(arr2, arr1));
    32. return 0;
    33. }

            不知不觉就到了尾声呢,咱们第十章的知识点就到这里了啦,作为小白的我,可能写的不是很好,不对的地方还请大佬大佬指点指点。
     

  • 相关阅读:
    超简单的集成表达式树查询组件,Sy.ExpressionBuilder 使用说明
    现代计算方法或可使潜艇狼群战术再现
    PMP每日一练 | 考试不迷路-12.3(包含敏捷+多选)
    浅析微前端框架 single-spa
    Android HAL机制的深入理解及在Linux上移植和运行的一个好玩的HAL小例子
    TCP通信,Let‘s go!
    【微信小程序】NFC 标签打开小程序
    STM32F103+1.3“SH1106 IIC内容滚动显示示例
    Mysql索引学习笔记
    常见浏览器兼容性问题及解决办法总结
  • 原文地址:https://blog.csdn.net/AAlykk/article/details/130800835