第3章总结
本节阅读量:章节回顾
语法错误是编写了不符合 C++ 语法规则的语句时发生的错误。编译器会捕获这些错误。
当语句在语法上是有效的,但没有实现程序员预期的功能时,就会发生语义错误。
从程序中查找和删除错误的过程称为调试。
我们可以使用五步过程来进行调试:
- 寻找错误原因
- 理解问题
- 决定如何修复
- 修复问题
- 重新测试
查找错误通常是调试中最困难的部分。
静态分析工具是分析代码并查找可能指示代码存在问题的语义问题的工具。
能够可靠地重现问题是调试中的第一步,也是最重要的一步。
我们可以使用许多策略来帮助发现问题:
- 注释掉代码。
- 使用输出语句验证代码流程。
- 打印值。
使用 print 语句时,请使用 std::cerr 而不是 std::cout。但更好的做法是,避免通过打印语句进行调试。
日志文件是记录程序中发生的事件的文件。将信息写入日志文件的过程称为日志记录。
在不改变代码行为的情况下重新组织代码结构的过程称为重构。这通常是为了使程序更具组织性、更加模块化或提升性能。
单元测试是一种软件测试方法,通过该方法测试源代码的小单元,以确定它们是否正确。
防御性编程是一种技术,程序员试图预见软件可能被滥用的所有方式。这些误用通常可以被检测到并加以缓解。
程序中跟踪的所有信息(变量值、已调用的函数、当前执行点)都是程序状态的一部分。
调试器是一种工具,它允许程序员控制程序的执行方式,并在程序运行时检查程序状态。集成调试器是集成到代码编辑器中的调试器。
单步调试是一组相关调试功能的名称,这些功能允许您逐条语句地执行代码。
Step-into 会执行程序路径中的下一条语句,然后暂停执行。如果该语句包含函数调用,则会跳转到被调用函数的顶部。
Step-over 会执行程序路径中的下一条语句,然后暂停执行。如果该语句包含函数调用,Step-over 会直接执行完该函数,并在函数执行后将控制权返回给您。
Step-out 会执行当前函数中的所有剩余代码,然后在函数返回时将控制权返回给您。
Run-to-cursor 会执行程序,直到到达光标所选择的语句。
“继续"按钮会运行程序,直到程序终止或命中断点。Start 与 continue 功能相同,只是它从程序的开头开始执行。
断点是一个特殊的标记,它告诉调试器在执行到达断点时暂停程序的执行。
监视变量允许您在程序以调试模式执行时检查变量的值。监视窗口允许您检查变量或表达式的值。
调用堆栈是为到达当前执行点而依次调用的所有活动函数的列表。调用堆栈窗口是用于显示调用堆栈的调试器窗口。