文章目录
-
- 前引
- 调试方法1:cout
- 测试方法2:修改测试文件 运行指定测试用例
前引
因为我大概在Lab3
中 调试了很久很久才把Lab3
写了出来 此时还没有进入Lab4
的完成工作中 其实还是非常非常忐忑的 不知道我的Lab1
Lab2
Lab3
的代码抗不抗打 但是反正最后还是希望能够顺利把Lab4
的代码写出来的 最多就是再去改嘛
把Lab3
的代码写出来 通过phase
调试的工作功不可没 我Lab1
Lab2
的时候都不会调试 就硬着头搞 浪费了很多时间 于是我专门来写这篇博客来说一下怎么进行调试 查看中间变量的数据
调试方法1:cout
这个其实还是比较简单的
我们只需要在我们想调试的文件中 先补充上一个头文件
#include <iostream>
然后我们再在一些地方 比如下面举个例子 我们想看看这边的seqno
究竟中间是多少 我们就在相对应的地方加上以下代码 如果那个test
出错的话 我们就能看到输出信息了 下面给出示例代码和截图
cout << seqno << endl;
例如测试重传次数(我为了test
出错故意改错代码 - -)
cout << "consecutive_retransmissions_times :" << consecutive_retransmissions_times << endl; "
即为我们的调试代码
//! \param[in] ms_since_last_tick the number of milliseconds since the last call to this method
void TCPSender::tick(const size_t ms_since_last_tick)
{
if(!timer.is_running()) return;timer.decline(ms_since_last_tick);if(timer.expire()){
++consecutive_retransmissions_times;if(window_size_zero) timer.resume();else timer.powtime();cout << "consecutive_retransmissions_times :" << consecutive_retransmissions_times << endl;//timer.start();_segments_out.emplace(_rtsms_queue.front());}
}
运行截图 make_checklab3
其中t_send_extra
failed
了 然后可以看到上方的四行输出 就是我们的输出结果 表示每次重传次数为1
当然我们需要结合具体代码和测试用例来看 我们可以看一下下面的list of steps that executed successfully
成功运行步骤来推算为什么会出现这种情况 然后出错
我们也可以在sponge/tests
中找到对应文件 看一下测试步骤 去修改对应的测试文件就是下面我们要说的了
测试方法2:修改测试文件 运行指定测试用例
这个的话 个人认为要和上面的一起用 很多时候才比较好用
我们所有的测试用例都是在sponge/tests
中的 比如我们就拿上面的测试用例说话 t_send_extra
出错了 我们去找到t_send_extra
对应文件 然后打开
再去看看我们报错的是哪个测试用例 看一下数据和代码很快就能找到 或者说我们可以一个一个测试用例调试 我们可以先把所有的测试用例加注释 比如像下面的 保存了运行一下 肯定是直接过了的
当然我们不这样做 我们去挨个挨个phase
过 看一下究竟哪里错了 定位到确定的phase
即可 我们再来调试 就是等于我们把其他的phase
注释掉 只留下我们错误的phase
我们在调试 可以节省很多时间^^
这里基本上就介绍完了 这里顺带再提一嘴 我们可以适当的在测试用例里面加一些代码 就是类似test.execute()
这样的 比如有些地方我们确实错了 但是想看一下数据 我们就可以取巧的把我们错误的数据代进去 它就会继续往下运行我们的代码 我们再看看输出多少
这里大家就自我发挥就好了 俗话说得好 师傅领进门 修行看个人了哈 哈哈
我该说的也说完了 希望这能够帮助到各位看官 为各位减少很多的调试时间^^ 那各位再见啦