首页 > 其他分享 >2023.10.18

2023.10.18

时间:2023-10-22 23:25:56浏览次数:34  
标签:代码生成 18 DBC 2023.10 问题 文本 代码 调试

第18节:调试

这一节强调了调试的重要性以及一些有关调试的心理学和技巧。

1. 调试的目标是解决问题,而不是对问题提出攻击性的反应。遇到 bug 时,应以解决问题为导向,而不是责怪他人或自己。

2. 当你目睹 bug 的发生或看到 bug 报告时,不要急于表示“那不可能”。首要任务是思考为什么问题发生,而不是争辩是否真的存在问题。

3. 可视化数据可以帮助调试。可视化工具和技术可以帮助你更好地理解问题,特别是对于复杂的问题,如循环引用。

4. 使用跟踪日志(logging)对代码进行跟踪。跟踪日志记录代码执行过程中的信息,可帮助你了解程序的运行情况,特别是对于非崩溃类错误。

5. 尝试“橡皮鸭调试法”,通过向虚拟听众(如小黄鸭)解释代码和问题,你可能会在解释的过程中自己找到问题所在。

6. 不要急于指责操作系统、集成开发环境(IDE)或第三方库出现问题。首先应确认和排查自己的代码问题,然后再考虑其他可能性。

7. 对 bug 的原因进行复盘,不仅修复问题,还要思考问题出现的原因,以及如何避免类似问题的再次发生。

第19节:文本操纵

这一节介绍了文本操纵的重要性和如何利用文本操作语言来处理文本数据。

1. 学习一种文本操作语言,它对程序员来说就像木工的刳刨机一样,用于处理文本数据。

2. 文本操作的案例包括处理大批量测试数据、数据库 schema 维护、生成 web 文档等。工具如Perl、Python、Shell的awk和sed等可用于文本操作。

第20节:代码生成器

这一节讨论了代码生成器的概念以及为什么程序员可以使用代码生成器来生成代码和其他文本内容。

1. 代码生成器是编写能够生成代码或其他文本内容的程序,用于减少重复性工作。

2. 有两类代码生成器,分为被动代码生成器和主动代码生成器。被动代码生成器生成独立的文本,而主动代码生成器在需要时生成特定的代码。

3. 代码生成器不仅限于生成代码,还可以生成其他格式的文本内容,如HTML、XML、纯文本等。

4. 示例中使用Perl作为代码生成器的示例,但类似的工作也可以使用Python或Shell中的awk和sed来完成。

第21节:按合约设计

这一节介绍了“按合约设计”(Design By Contract,简写DBC)的概念,该概念强调在代码中明确定义模块的权利与责任,并进行校验。

1. "按合约设计"(DBC)是Bertrand Meyer为Eiffel语言开发的概念,它旨在通过前置检查和后置保证来确保程序的正确性。

2. DBC有三个关键概念:前条件、后条件和类不变项,用于明确定义模块的行为和约束。

3. 在支持DBC的编程语言中,你可以使用相应的语法或框架来声明前条件、后条件和类不变项,以便在编译时或运行时进行校验。

4. 尽管DBC的支持语言相对有限,但它强调了开发人员应明确定义和校验代码的权利和责任,从而提高了代码质量。

第22节:死程序不说谎

这一节强调了对待程序中可能的错误和异常情况的态度。

1. 避免对程序过于自信,要有警惕心。忽视潜在的问题可能会导致严重的后果。

2. 在异常情况下,应该及早崩溃,以强调问题的存在,而不是默默地继续执行,可能导致更严重的错误。

3. 在引发崩溃时,不要造成不可逆的破坏,例如,确保已申请的资源已经释放。

4. 死程序通常比有潜在问题的程序更容易处理,因为它们的问题被明确识别,而不是潜在的隐患。

这一节的核心思想是不要忽视可能的问题,要及早发现和解决它们,以确保代码的可靠性和稳定性。

标签:代码生成,18,DBC,2023.10,问题,文本,代码,调试
From: https://www.cnblogs.com/ztydebeishanglaojia/p/17781358.html

相关文章

  • 2023.10.19
    1.0版本生成四则运算并存入数据库importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOE......
  • 2023.10.20
    四则运算2.0失败版本server.port=8080spring.datasource.url=jdbc:h2:mem:testedspring.datasource.driverClassName=org.h2.Driverspring.datasource.username=saspring.datasource.password=passwordspring.jpa.hibernate.ddl-auto=updatepackagecom.example.mathquiz;//替换......
  • 2023.10.17
    第13节:估算这一节强调了估算在软件开发中的重要性,并提供了一些建议来提高估算的准确性。1.通过学习估算并发展直觉,你可以展现出一种魔法般的能力,来确定任务的可行性。2.让估算更准确的单位值和描述方法是至关重要的,比如将时间估算从粗略的“大约6个月”改进为更精确的“130个......
  • 2023-2024-1 20231418《计算机基础与程序设计》第四周学习总结
                      2023-2024-120231418《计算机基础与程序设计》第四周学习总结这个作业属于哪个课程2022-2023-1-计算机基础与程序设计这个作业要求在哪里[2022-2023-1计算机基础与程序设计第四周作业]https://www.cnblogs.com/roce......
  • 文心一言 VS 讯飞星火 VS chatgpt (118)-- 算法导论10.3 3题
    三、用go语言,在ALLOCATE-OBJECT和FREE-OBJECT过程的实现中,为什么不需要设置或重置对象的prev属性呢?文心一言:在Go语言中,ALLOCATE-OBJECT和FREE-OBJECT过程的实现通常不需要显式地设置或重置对象的prev属性。这是因为在Go语言的内存管理中,对象(或更具体地说,变量)的生命......
  • 2023.10.22——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.休息明日计划:学习......
  • 2023.10.22博客
    有一段时间没写博客了,主要原因是忘了写了,哈哈哈。这段时间把分支与循环的内容收了尾,并开启了一个全新篇章函数,我会将我的笔记贴在下面:库函数(cplusplus.com/reference/clibrary/库函数查询)常见库函数 strcpy//strcpy-stringcopy-字符串拷贝#include<stdio.h>#include<s......
  • CentOS 8 Stream vs Anolis8.8 对比(2023.10)
    硬件环境Honor笔记本电脑,16GRAM,512GSSD,本机自带无线网卡,外接USB有线网卡安装Anolis8.8到一个128GKingstonU盘,出现如下现象显卡驱动无法支持笔记本的外接显示器;中文输入法无法自动工作;内核版本为5.10;本机的无线网卡未自动识别重新安装CentOS8Stream......
  • 18_JDK8-17新特性
    ......
  • 2023.10.21——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.休息明日计划:学习......