检查点练习
检查点练习 (8题)
#practice #testing #debugging
相关概念
📌核心模式(点击查看)
| 关键词 | 答案 |
|---|---|
| BREAK-POINT | 无条件,启动调试器 |
| ASSERT | 有条件,条件为假时转储 |
| LOG-POINT | 仅记录,必须有 ID |
| 检查点组 | SAAB 事务,激活/停用 |
| 断言状态 | 不活跃、中断、记录、中止 |
第1题 - 检查点类型 [记忆]
说出三种检查点类型及其主要特征。
📌点击查看答案
| 类型 | 语句 | 激活时的效果 |
|---|---|---|
| 断点 | BREAK-POINT [ID grp] |
中断程序,启动调试器 |
| 断言 | ASSERT [ID grp] condition |
条件为假时:根据组设置转储/中断/记录 |
| 日志点 | LOG-POINT ID grp [FIELDS ...] |
写入检查点组日志;从不中断 |
第2题 - ASSERT 语法 [记忆]
当
ASSERT条件评估为假且没有分配检查点组时会发生什么?
📌点击查看答案
没有检查点组(
ASSERT condition)时,断言始终激活且无条件的。如果条件为假,立即产生运行时错误(转储) – 程序以 ASSERTION_FAILED 短转储终止。第3题 - 检查点组 [记忆]
如何创建和配置检查点组?
📌点击查看答案
- 在对象导航器或事务 SAAB 中创建
- 输入名称(必须在客户命名空间中,如
ZBC402_##) - 添加描述性短文本
- 保存
- 为每种检查点类型配置激活状态:
- 断言:不活跃 / 中断 / 记录 / 中止
- 断点:不活跃 / 中断
- 日志点:不活跃 / 记录
第4题 - 断言 vs 异常 [分析]
何时应使用 ASSERT,何时应抛出异常?
📌点击查看答案
| 方面 | ASSERT | 异常 |
|---|---|---|
| 用途 | 验证关于程序状态的假设 | 处理意外但可能的情况 |
| 激活时机 | 开发/测试(可在生产中停用) | 始终激活 |
| 恢复 | 无恢复(转储/中断) | 可被捕获和处理 |
| 使用场景 | “这不应该发生” | “这可能发生,需要处理” |
断言验证内部正确性(如私有方法中的参数验证)。异常处理运行时条件(如文件未找到、数据库错误)。
第5题 - 静态 vs 可激活断点 [应用]
在生产代码中使用
BREAK-POINT(不带 ID)有什么风险?如何预防?
📌点击查看答案
BREAK-POINT 不带 ID 始终激活 – 它会中断在生产环境中执行程序的任何用户,造成干扰。预防方法:- 改用
BREAK-POINT ID checkpoint_group(可停用) - 传输前运行扩展程序检查 – 它将静态断点标记为错误
- 发布传输前始终移除
BREAK-POINT和BREAK username语句
第6题 - LOG-POINT 要求 [记忆]
LOG-POINT 有什么是其他检查点类型可选的强制性要求?
📌点击查看答案
LOG-POINT 必须始终有 ID group 附加项。与断点和断言不同,日志点不能在没有检查点组的情况下使用。因为日志点没有独立行为 – 它们仅在检查点组激活时产生输出。第7题 - FIELDS 附加项 [应用]
你想在日志点到达时记录
lv_flight_date的值。写出语句。
📌点击查看答案
1 | LOG-POINT ID zbc402_check FIELDS lv_flight_date. |
FIELDS 附加项将指定数据对象的内容存储在检查点组的日志中。最多可指定 8 个数据对象。引用变量不能被记录。
第8题 - 方法设计中的断言 [分析]
一个方法
find_item接收一个键参数并从内表中读取。设计两个断言:一个在入口,一个在出口。
📌点击查看答案
1 | METHOD find_item. |
入口断言验证调用者的输入。出口断言验证方法自身的结果。两者共同确保方法的契约被满足。
📌模式总结(点击查看)
| 关键词 | 答案 |
|---|---|
| BREAK-POINT | 无条件启动调试器 |
| ASSERT 条件为假 | 无组时转储;有组时可配置 |
| LOG-POINT | 必须有 ID,从不中断 |
| SAAB | 检查点组维护事务 |
| 断言状态 | 不活跃/中断/记录/中止 |
| FIELDS | 记录数据对象(最多8个,不含引用) |
| 断言 vs 异常 | 验证假设 vs 处理意外 |