常见疑难杂症治疗方法
| bugs | solutions |
|---|---|
| 写错人名(例如freda写成fread) | 人名直接复制就好了 |
| 错误地使用STL(例如,lower_bound和upper_bound用错) | 不用不确定的功能或者类似的函数多试几次,总能找到正确的那个 |
| 二分细节(例如,答案是左端点还是右端点) | 对样例,再对几组手造的小数据,哪个正确就是哪个 |
| 算法细节错误(例如,初始化高斯消元的系数矩阵填错数字) | 在所有可能出错的地方输出一下可能出错的东西 |
| 漏掉特判边界条件 | 造包含边界条件的小数据看结果 |
| 死循环/死递归 | 输出循环变量/递归函数的参数,一定要用cerr |
| 下标从0开始还是1开始 | 形成一个固定的模式,不变就好了 |
一些debug需求的实现方法
| requirements | solutions |
|---|---|
| 跟踪函数调用 | 在函数开始调用和结束的地方分别给出输出 |
| 找到RE的地方 | 直接跟踪代码的执行,有可能RE的地方一步一个输出 |
| 判断某个变量是否取到某个特殊的值 | 使用if语句和异常机制(如果取这个值则抛出异常,用来辅助处理边界问题) |
特别提醒:
附加资源:debug.hpp