代码调试
如何进行代码的调试与错误查找

如何进行代码的调试与错误查找代码的调试与错误查找对于程序员来说是非常重要的,它可以帮助我们找出代码中隐藏的bug并进行修复,从而保证程序的稳定性和可靠性。
本文将分为几个部分来介绍如何进行代码的调试与错误查找,包括常见的调试工具、调试技巧和常见的错误类型等。
希望能为大家在日常工作中遇到代码错误时提供一些帮助。
一、调试工具1.编译器大多数编译器都提供了调试功能,可以用来设置断点、单步执行程序、观察变量的值等。
常见的编译器包括Visual Studio、Eclipse、Xcode等,它们都支持多种调试功能,可以根据具体的需求选择合适的工具。
2.调试器调试器是一种专门用来调试程序的工具,它可以帮助我们找出程序中的错误并进行修复。
常见的调试器包括GDB、LLDB、WinDbg等,它们都提供了丰富的调试功能,可以帮助我们更快速地找出程序中的问题。
3.日志工具日志工具可以帮助我们记录程序的运行情况,包括函数的调用、变量的取值等。
通过分析日志可以帮助我们找出程序中的错误,并进行修复。
常见的日志工具包括log4j、logback、log4net等,它们都提供了丰富的日志记录功能,可以帮助我们更加方便地进行调试和错误查找。
二、调试技巧1.设置断点设置断点是调试程序的有效方法,通过断点我们可以在程序执行到指定的位置时暂停程序,并观察程序的运行情况。
在编译器中设置断点非常简单,只需要在需要断点的地方点击鼠标左键即可。
2.单步执行程序单步执行程序是在程序执行到断点时一步一步地执行程序,通过观察程序的运行情况可以帮助我们找出程序中的错误。
在编译器中可以使用F10键来进行单步执行。
3.观察变量的值通过观察变量的值可以帮助我们找出程序中的错误。
在编译器中可以使用watch窗口来观察变量的值,并且可以对变量进行修改。
4.使用调试器调试器是一种非常强大的工具,它可以帮助我们找出程序中的错误并进行修复。
通过调试器我们可以观察程序的运行情况,设置断点,查看变量的值等。
代码调试技巧快速定位和解决程序中的错误

代码调试技巧快速定位和解决程序中的错误在软件开发过程中,无论是大型项目还是小型工作,程序中的错误总是难免的。
代码调试是程序员日常工作中的一项关键任务,它需要高效的定位和解决问题。
本文将介绍一些代码调试技巧,帮助程序员快速定位和解决程序中的错误。
1. 使用调试器调试器是程序员调试代码的重要工具。
它提供了检查代码执行的环境、变量的值以及程序流程的能力。
通过使用调试器,程序员可以逐行执行代码,逐步分析代码的执行过程,从而找出潜在的错误。
常见的调试器有Visual Studio中的调试工具、GDB等。
2. 打印调试信息打印调试信息是最简单直接的调试技巧之一。
程序员可以在代码中插入打印语句,输出关键变量的值和程序执行流程信息。
这样可以帮助程序员更好地理解代码的执行过程、查找问题的根源。
但需要注意的是,只在需要调试时才插入打印语句,避免在代码中留下无用的打印信息。
3. 使用断言断言是一种在程序运行过程中检查特定条件是否满足的方法。
程序员可以在代码中插入断言语句,如果条件不满足,程序就会中断执行并输出错误信息。
通过使用断言,程序员可以快速发现代码中的逻辑错误,并定位到错误发生的位置,从而进行调试和修复。
4. 编写单元测试单元测试是一种对代码中最小功能单元进行测试的方法。
程序员可以编写一系列的测试用例,对每个功能单元进行覆盖测试,并检查输出是否与预期一致。
通过编写单元测试,可以发现代码中的逻辑错误和边界情况,提高代码的可靠性和稳定性。
5. 使用日志工具日志工具可以记录程序的运行状态和关键信息,帮助程序员定位错误。
程序员可以在代码中插入日志输出语句,输出程序的执行轨迹和关键变量的值。
通过分析日志,可以了解程序的执行过程和错误发生的上下文,快速定位问题的原因。
6. 逐步调试逐步调试是调试代码时常用的技巧之一。
通过逐行执行代码、逐步观察程序的执行过程,程序员可以快速发现错误。
在调试过程中,可以结合使用断点、观察窗口和变量窗口,进一步分析代码的执行,并根据需要修改代码,修复错误。
代码调试流程

代码调试流程一、概述在软件开发过程中,代码调试是非常重要的一环。
通过调试可以找到代码中存在的问题并进行修复,从而保证程序的稳定性和正确性。
本文将介绍代码调试的流程。
二、准备工作1. 确定调试工具:根据需要选择合适的调试工具,如Visual Studio、Eclipse等。
2. 设置断点:在需要调试的代码行上设置断点,以便在程序执行到该处时暂停程序运行。
3. 准备测试数据:根据测试用例准备好测试数据,以便在程序运行时进行输入。
三、开始调试1. 启动调试器:打开相应的IDE或编辑器,在菜单栏中选择“Debug”或“Run with Debug”等选项启动调试器。
2. 运行程序:使用准备好的测试数据运行程序,在程序执行到设置的断点处时会自动暂停。
3. 分析问题:查看变量值、函数返回值等信息来分析问题所在,可以使用单步执行功能逐步跟踪代码执行过程。
4. 修复问题:根据分析结果对代码进行修改,并重新运行程序验证修改是否有效。
四、常见问题与解决方法1. 编译错误:检查代码语法错误和编译选项是否正确设置。
2. 运行错误:检查输入数据是否符合要求,是否存在边界问题等。
3. 逻辑错误:分析代码执行过程中的变量值、函数返回值等信息,找到逻辑错误所在并进行修复。
4. 性能问题:通过调试器的性能分析功能找到程序的性能瓶颈,并进行优化。
五、调试技巧1. 使用断言:在代码中加入断言语句,以便在程序运行时检查某些条件是否成立,从而快速定位问题所在。
2. 使用日志输出:在代码中加入日志输出语句,记录程序执行过程中的关键信息,方便分析问题。
3. 利用调试器工具:调试器提供了许多有用的工具和功能,如断点管理、变量监视、堆栈跟踪等,可以大大提高调试效率。
六、总结代码调试是软件开发过程中不可或缺的一环。
通过准备工作和一系列步骤,可以有效地找出代码中存在的问题并进行修复。
同时,使用合适的调试技巧和工具也可以提高效率和精度。
代码调试中的常见问题与解决方法

代码调试中的常见问题与解决方法代码调试是程序开发过程中一个非常重要的环节,但常常会遇到各种问题,导致开发进度延误。
下面将介绍一些常见的代码调试问题及解决方法,希望对大家有所帮助。
1.语法错误语法错误是最为常见的问题之一,如果代码中存在语法错误,程序将无法正常运行。
通常会出现拼写错误、缺少分号等问题。
在这种情况下,编译器会给出相应的错误提示,如缺少分号、拼写错误等信息。
解决方法是仔细检查代码,对照错误信息进行修改。
2.逻辑错误逻辑错误是指程序逻辑上的错误,导致程序无法按照预期的方式运行。
有时候程序可以正常编译并且运行,但是结果却不正确。
这种情况下,需要通过调试工具进行逐步调试,找出程序逻辑上的错误,并进行修正。
3.内存泄漏内存泄漏是指程序在运行过程中分配了内存空间但没有及时释放,导致内存占用不断增加,最终导致程序崩溃。
通常情况下,内存泄漏会导致程序变得越来越慢,直至最终崩溃。
可以通过内存调试工具检测内存泄漏问题,并进行相应的修复。
4.程序崩溃程序崩溃是指程序在运行过程中突然停止工作的现象,通常会出现错误提示。
常见的程序崩溃原因包括访问非法内存、栈溢出等。
解决方法是通过调试工具跟踪程序执行过程,找出程序崩溃的原因,并进行相应的修复。
5.性能问题性能问题是指程序在运行过程中性能较差,例如运行速度慢、资源占用高等。
通常情况下,性能问题会导致程序体验不佳,甚至影响用户体验。
可以通过性能分析工具进行性能测试,找出性能瓶颈并进行优化。
6.死锁问题死锁是指两个或多个进程在执行过程中,由于竞争资源导致相互等待,进而导致程序无法继续执行的情况。
通常情况下,死锁问题很难排查,需要通过调试工具进行分析,找出死锁的原因,并进行相应的处理。
总的来说,代码调试是程序开发过程中不可或缺的一部分,但也是一个复杂而繁琐的工作。
在遇到问题时,我们应该耐心、细心地进行排查,并利用各种调试工具来帮助我们解决问题。
只有不断提升自己的调试技能,才能更好地完成程序开发工作。
代码错误调试:解决代码错误和异常的常见技巧和方法

代码错误调试:解决代码错误和异常的常见技巧和方法代码错误调试是编程过程中非常常见的一项工作。
当程序运行出现异常或者出现错误时,我们需要采取一些技巧和方法来找到问题并进行修复。
下面是一些常见的解决代码错误和异常的技巧和方法。
1.查看错误信息:当程序出现错误时,通常会有错误信息提示。
这些错误信息可以帮助我们更快地定位问题,了解错误的原因。
因此,首先需要认真查看错误信息,明确问题所在。
2.使用调试器:调试器是一种强大的工具,可以帮助我们逐步执行程序并查看程序在每一步的状态。
通过设置断点、单步调试等功能,我们可以更直观地观察程序运行的过程,找到问题所在。
3.打印调试信息:在程序中适当地插入一些打印语句,输出程序执行过程中的变量值、状态等信息。
通过查看这些信息,可以更清晰地了解程序的执行流程,找到可能出现问题的地方。
4.缩小范围:当程序出现问题时,可以尝试将问题缩小范围,减少程序的复杂度。
例如,可以将程序拆分成几个部分进行分别测试,找出具体出现错误的部分。
5.查看日志:程序通常会有日志输出,记录程序运行的信息和状态。
通过查看日志文件,可以找到程序在哪个地方出现了问题,从而更快定位和解决错误。
6.搜索引擎和社区:在遇到问题时,可以通过搜索引擎和技术社区寻求帮助。
很多时候,别人可能也遇到过相似的问题,通过搜索可以找到解决方法或者相关的讨论。
7.检查语法错误:有些错误是由于语法错误导致的,例如拼写错误、符号错误等。
在遇到问题时,可以先仔细检查程序的语法,确保没有简单的语法错误。
8.更新软件和库:有些错误是由于软件或者库版本不兼容或者存在bug导致的。
在出现问题时,可以尝试更新相关软件和库,查看是否有已知的解决方法。
9.参考文档和教程:在解决问题时,可以参考官方文档和教程,查看相关的使用方法和示例代码。
通过学习文档和教程,我们可以更深入地了解程序的原理和使用方法,更好地解决问题。
10.请教他人:在遇到棘手问题时,可以向他人寻求帮助。
代码调试的介绍

代码调试的介绍代码调试是软件开发过程中非常重要的一环。
通过调试,开发人员可以找到程序中的错误并进行修复,提高代码的质量和稳定性。
本文将介绍代码调试的基本概念、调试方法和技巧,以及一些常见的调试工具和技术。
一、代码调试的基本概念代码调试是指在程序运行过程中,通过观察程序的执行状态和输出结果,找出程序中的错误并进行修复的过程。
调试的目的是使程序能够按照预期的方式运行,达到设计的要求。
调试的过程通常包括以下几个步骤:1. 定位错误:通过观察程序的执行状态和输出结果,确定错误出现的位置和原因。
2. 分析错误:对错误进行分析,找出错误的根本原因。
3. 修复错误:根据错误的原因,对程序进行修改,以消除错误。
4. 验证修复:对修改后的程序进行测试,确保错误已经修复。
二、常见的调试方法和技巧1. 打印调试信息:在程序中插入打印语句,输出变量的值和程序执行的状态,以便观察程序的执行过程和数据的变化。
这是最常用的调试方法之一,但在调试大型复杂程序时,可能会产生大量的输出信息,不利于定位错误。
2. 单步调试:使用调试工具逐行执行程序,并观察程序的执行状态和变量的值,以便定位错误。
单步调试可以精确定位错误的位置,但对于复杂的程序可能会比较耗时。
3. 条件断点:设置断点的条件,当满足条件时暂停程序的执行,以便观察变量的值和程序的执行状态。
条件断点可以帮助我们在特定的条件下观察程序的执行过程,找出问题所在。
4. 追踪调试:通过记录程序的执行轨迹和变量的变化,以便回放和观察整个程序的执行过程。
追踪调试可以帮助我们理清程序的逻辑和数据流程,找出错误所在。
5. 异常捕获:通过在程序中捕获异常,以便观察异常的类型和位置,帮助我们定位和修复错误。
异常捕获是一种常见的调试技巧,可以帮助我们发现一些隐藏的错误。
三、常见的调试工具和技术1. IDE调试器:集成开发环境(IDE)通常都提供了调试功能,可以逐行执行程序、观察变量的值和程序的执行状态,以及设置断点和条件断点。
如何处理常见的代码错误和异常

如何处理常见的代码错误和异常在软件开发中,代码错误和异常是难以避免的。
它们可能是由于语法错误、逻辑错误、数据不一致、资源不足或外部环境因素引起的。
在编码过程中,我们需要学会如何处理这些常见错误和异常,以便尽快识别、排除和修复问题。
本文将介绍如何处理常见的代码错误和异常,包括代码调试、异常处理、错误处理、日志记录和单元测试等方法。
1.代码调试代码调试是最常见的处理代码错误和异常的方法之一。
当程序出现错误或异常时,我们可以使用调试器(例如IDE中的调试器或打印语句)逐行检查程序的执行过程,查看变量的值和函数的返回结果,从而找到问题所在。
调试工具可以帮助我们追踪代码的执行路径,识别问题的根源。
2.异常处理异常处理是一种处理运行时错误和异常的方法。
当程序运行时发生错误或异常时,可以使用异常处理机制捕捉并处理这些错误。
在捕捉到异常后,我们可以执行适当的处理代码,如打印错误消息、记录日志、回滚事务或返回给用户友好的提示。
异常处理可以避免程序崩溃,并提供更好的用户体验。
3.错误处理错误处理是一种处理非运行时错误和异常的方法。
这些错误通常是由于数据不一致、资源不足、系统配置问题或外部环境因素引起的。
在处理错误时,我们可以使用条件语句(如if语句)检查错误的类型和条件,并采取相应的处理措施。
错误处理可以帮助我们防止潜在的问题,并提供更可靠的应用程序。
4.日志记录日志记录是一种记录和跟踪程序运行过程中发生的事件和错误的方法。
通过将关键信息写入日志文件或数据库,我们可以在发生错误或异常时回顾程序的执行状态,并找到问题的原因。
我们可以记录错误消息、调试信息、警告和运行时统计数据等。
日志记录可以帮助我们诊断问题、快速定位错误并进行及时修复。
5.单元测试单元测试是一种测试方法,用于确认单个代码单元(如函数、类或模块)的正确性。
通过编写测试用例,我们验证代码是否按预期工作,并捕获和处理可能的错误和异常。
单元测试可以帮助我们在开发过程中追踪和预防问题,并保证代码质量。
如何进行代码调试

如何进行代码调试作为程序开发人员,代码调试是我们日常工作中不可避免的环节。
通过调试,我们可以找出代码中的错误和问题,并进行修复,确保程序的正确性和稳定性。
本文将介绍一些常见的代码调试技巧和方法,希望能帮助大家提高调试效率。
一、理解问题在进行代码调试之前,首先要明确问题所在。
通过与用户或测试人员的沟通,了解问题的具体表现和出现的条件,有助于我们更准确地定位问题所在的代码位置。
二、使用调试工具现代的集成开发环境(IDE)通常都内置了强大的调试工具,例如断点调试功能。
通过设置断点,我们可以在特定的代码行暂停程序执行,然后逐步跟踪代码的运行,查看变量的值和执行流程,帮助我们找出错误。
此外,调试工具还常常提供查看调用栈、监视变量值、表达式求值等功能,非常有助于代码调试。
三、添加日志输出当我们无法使用调试工具进行调试时,可以通过添加日志输出的方式来帮助定位问题。
在代码关键的地方加入日志语句,并输出相关变量的值和执行流程信息。
通过查看日志输出,我们可以追踪代码的执行路径,分析问题出现的原因。
四、逐渐排除错误如果问题难以定位或涉及多个文件、模块的代码,可以通过逐步排除法来进行调试。
将代码分割成若干部分,单独进行测试和调试,逐渐缩小问题所在的范围。
例如,可以注释掉一部分代码,检查问题是否仍然存在,然后逐步取消注释,直到问题重新出现,找到引发问题的代码。
五、运用断言和异常处理利用断言和异常处理机制可以帮助我们更早地发现问题并终止程序的执行,避免错误进一步扩大。
在代码中添加断言,确保程序的执行环境和预期一致。
同时,合理地使用异常处理机制,及时捕获和处理异常,防止程序因为异常而崩溃或出现不可预料的错误。
六、借助第三方工具除了IDE提供的调试功能外,还有许多优秀的第三方调试工具可以使用。
一些代码分析工具可以帮助我们查找潜在的错误和代码质量问题,例如静态代码分析工具、性能分析工具等。
借助这些工具可以更加全面地检查和优化代码,提高程序的健壮性和性能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 2017年秋 • 中科大-信院
作业问题总结
• 构建多文件项目-头文件、源文件 • 图像的创建、拷贝 • 子图截取 • opencv中的8U、32F问题 • 函数参数的传入和传出,指针与引用 • 防御性编程 • 梯度图尺寸问题(周边一圈) • 查表法
作业问题总结
• 图像通道数 • 循环中的浮点转整数问题 • 32F图像的data指针查看问题 • 右移问题 • 数组越界引起的崩溃问题(8U当做float处理) • 路径中的双斜线问题 • 角度的圆周问题,359-1的问题 • imtool工具
调试工具
• debug与release的区别 • 逐行调试 • 运行到当前行、添加断点 • 进入函数内部、跳出函数 • 为断点加条件 • 数组的观察
调试技巧
• 分离法
• 注释法,一步步缩小范围 • 代码要提高模块性,更适合分离法调试
• 追本溯源
• 一旦发现某次测试结果不对,要从后往前依次检查 • 找到第一次出现异常的位置
函数的参数
• 多个函数,参数顺序要保持一致 • 所有的参数,都必须被使用 • 注释中务必写清楚参数的用途 • 为了提高可读性,可以对参数加上input_,output_等前 缀 • 参数数目尽量少
• 7个以内
函数的参数
• 不能用来做内部工作变量
函数的布局
• 空行分割函数各部分 • 参数按标准缩进
• 准备测试用例,消耗时间,但磨刀不误砍柴工 • bug暴露越早,越容易排查
代码调试-调试技巧
• 心理准备
• 调试才是主旋律 • bug是代码的反面,如同阳光与影子 • 程序员的工作,就是消除bug
• 冷静分析,评估大致的出错位置、相关变量 • 检查代码 • 利用最终结果、中间结果,对出错现象的推测 • 逐行调试——“蚁附”
• 视觉效果上,要利于发现错误
代码调试-代码编写
• 降低编辑错误的手段
• 写一行,看三遍 • 结对编程 • 代码评审 • 代码块的整体阅读 • 写代码之前,先写好注释、流程 • 相关变量进行系统性管理
代码拷贝的高风险
• 需要拷贝的地方,一定要封装 • 用函数调用代替拷贝
• 差异性体现在参数上
• 拷贝容易掩藏错误
代码设计要点
• 功能尽量单一 • 模块之间,耦合度降低到极限
• 模块之间,沟通的变量尽量少
• 消除全局变量 • 成员变量要尽量少
代码调试-代码编写
• 编写阶段,不要犯低级错误
• 变量名混淆 • 运算符混淆 • 全局变量与局部变量同名 • 成员变量与局部变量同名 • 小括号()的遗漏 • 大括号{}的遗漏 a/b*c for () a++; gradx grad_x
兵者,国之大事
• 上兵伐谋,其次伐交,其次伐兵,其下攻城。攻城之法, 为不得已。修橹轒輼,具器械,三月而后成,距堙,又三 月而后已。将不胜其忿而蚁附之,杀士卒三分之一而城不 拔者,此攻之灾也。 • 调试代码——典型的“蚁附”,所有程序员的噩梦
• 让战争发生在你的脑海中 • 编写代码之前,必须精细设 计 • 不要轻易调试代码
• 人眼不容易察觉,哪些变量没有替换
• 整片代码拷贝,会导致与上下文之间出现大量“裂缝” • 拷贝时生产代码的速度太高
• 超过了人脑的检查速度
代码;10行),一定要经过测试 • 不要积累未测试的代码 • 90%的错误,都是发生在新改动的地方
• 测试样例要丰富,提早发现问题
创建函数的正当理由
• 降低复杂度 • 引入中间、易懂的抽象
• 不创建函数
• 创建函数
创建函数的正当理由
• 避免代码重复 • 隐藏具体实现过程和细节,降低大脑负担 • 隔离不可移植的部分,提高移植性 • 方便代码修改 • 方便错误排查 • 代码重构的成本低
简单的代码是否需要写成函数
• 一行代码 • 写成函数
• 试探
• 从当前的现象,猜测原因 • 改动流程,验证猜测
其他辅助方法
• 输出语句
• 野蛮但是简单的调试方法
• 插桩法
• 验证流程的正确性
• 日志
• 发布之后的维护手段
代码调试-经验总结
• 平日的努力 • 将代码当做账本一般,一有时间就要仔细检查 • 代码库的储备——尽量使用稳定代码 • 总结规律 • 每个程序员,出错都有其规律 • 对自己的bug进行统计分析 • 充分熟悉自己的缺陷 • 记录下每次出错的详细情形,找到对策,进行预防
• 调试代码,成本太高 • 务必保证,被调试的代码,已 经没有低级错误
• 事前的设计,代价要低得多
• 只动脑,成本是最低的
代码调试-调试前的工作
• 做设计==写代码? • 精细规划
• 模块划分一定要足够细,功能要尽量单一
• 流程设计要仔细,反复思考是否存在漏洞、没考虑到的 情形 • 仔细思考每条分支,是否有分支被中断了 • 对模块划分、流程等结果的精细校对 • 多人协作时,接口部分是错误高发地带 • 函数调用,传递参数是错误高发地带
函数的布局
• 参数按标准缩进
函数注释注意事项
• 注释要靠近其说明的代码 • 在函数上部用一两句话说明 • 声明参数的地方进行注释
• 分清输入和输出数据
函数注释注意事项
• 注释接口假设
• 各参数的细节说明,提醒用户如何正确使用
• 局限性要说明 • 全局效果 • 算法细节或者来源 • 用注释对代码加以说明
• • • • cos() Next() IsReady() CurrentColor()
好的函数名称
• 动词+宾语
• PrintDocument • CalcMonthlyRevenues • CheckOrderInfo
• 常用对仗词
函数的长度
• 初学者
• 大三学生不知道灵活创建和调用函数,很普遍 • 往往很长,大量的代码在一个函数中 • 从不进行事先的规划和设计,想到哪写到哪
• 甚至安装不了
• c语言基础普遍很薄弱
• 指针运用很不熟练
• 使用第三方库能力很弱 • 毫无模块化意识 • 动手经验少得惨不忍睹
• 读代码能力弱 • 以opencv为例,没有自学能力,无法迅速上手新知识 • 文件读取这样的基本操作都不熟 • 查错能力=0,碰到问题只能靠人品
代码调试相关书籍
• 软件调试的艺术 • 实用c++调试指南 • 软件调试实战 • 软件调试修炼之道 • 话说程序调试 • 软件调试
• 代码架构,要利于暴露问题
• 开发强大的观测模块,很容易观测到中间结果 • 通过的流程的运行细节分析,才能提早看到问题
课程外——孙子兵法(降低风险)
• 兵者,国之大事,死生之地,存亡之道; • 道天地将法;智信仁勇严; • 计利以听,乃为之势。 • 兵者,诡道也。 • 夫未战而庙算胜者,得算多也。 • 故兵贵胜,不贵久。 • 善用兵者,役不再籍,粮不三载。因粮于敌。 • 不战而屈人之兵,善之善者也。 • 故上兵伐谋,其次伐交,其次伐兵,其下攻城。 • 知彼知己,百战不殆;
调试他人的代码
• 如何调试别人的代码 • 文档最重要 • 尽量能联系到写代码的人 • 逐行运行,搞清楚流程 • 功能绝缘,分离不相关部分
设计、测试、调试的综合考虑
• 测试、观测模块,如同盖房子时的支架 • 设计代码时,要提前考虑测试模块
• 测试模块,要用最多的时间来设计 • 测试模块,要用最好的程序员来开发
• 昔之善战者,先为不可胜,以待敌之可胜。 • 以正合,以奇胜。 • 战势不过奇正,奇正之变,不可胜穷也。 • 故善战人之势,如转圆石于千仞之山者,势也。 • 兵因敌而制胜。故兵无常势,因敌变化而取胜。 • 攻而必取者,攻其所不守也;守而必固者,守其所不攻也。 • 故善战者,致人而不致于人。 • 故其疾如风,其徐如林,侵掠如火,不动如山,难知如阴,动如雷震。 • 故将有五危:必死,可杀也;必生,可虏也;忿速,可侮也;廉洁,可辱也;爱民,可烦也。 • 卒未亲附而罚之,则不服,不服则难用也。 • 非利不动,非得不用,非危不战。 • 能以上智为间者,必成大功;
调研结果-学习过程中的最大难题
• 资源多,工具多,不知道学什么;抓不住重点 • 调试最痛苦
• 多次碰壁之后,丧失了信心;问题无法解决,很难再坚持下去; • bug太多,对代码反感;甚至出现恐惧心理
• 新知识太多;知识太散乱 • 没有实践的机会 • 缺乏高手的指导;急需抱大腿 • 大学物理实验,太占用时间 • 题目做得再好,也不知道动手
• 修改了代码
好的函数名称
• 描述子程序所做的所有事情 • 不用含义模糊的动词
• HandleOutput() • FormatAndPrintOutput() • ComputeReportTotalAndOpenOutputFile()
• 不能用1、2、3、4或者new之类的字眼来区分 • 函数名长度要合理 • 描述清楚返回值
学期末-课程论文
• 详细记录每一周,自己在开发技能上的提升 • 代码优化的进步过程 • 降低bug概率的进步过程 • 编码效率的提升过程 • 团队协作过程中的问题,及学习收获
代码优化作业2-圆周差分
作业分析
• 圆周差分定义 • 在目标的外轮廓上,内外分别偏差5个像素,绘制两个 圆。大圆上灰度平均值,与小圆上灰度平均值的差值。 • 对圆形目标的搜索
• 有多种意见,并不统一
• 50-150行 • 不超过屏幕高度 • 500行以内
• 超过200行,影响可读性 • 具体长度根据自己的习惯决定,提高可读性是关键
函数的参数
• 重要性
• 39%的错误属于接口错误 • 将参数对应上,比较消耗时间
• 注意顺序:输入-修改-输出 • 创建自己的in和out关键字