当前位置: 代码迷 >> 综合 >> Stanford University CS144 调试方法
  详细解决方案

Stanford University CS144 调试方法

热度:73   发布时间:2023-11-17 17:27:42.0

文章目录

    • 前引
    • 调试方法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()这样的 比如有些地方我们确实错了 但是想看一下数据 我们就可以取巧的把我们错误的数据代进去 它就会继续往下运行我们的代码 我们再看看输出多少

这里大家就自我发挥就好了 俗话说得好 师傅领进门 修行看个人了哈 哈哈
我该说的也说完了 希望这能够帮助到各位看官 为各位减少很多的调试时间^^ 那各位再见啦

在这里插入图片描述

在这里插入图片描述

  相关解决方案