需知:就算有的逻辑判断觉得没必要,也不妨写出来,因为多线程的运行确实难以预测,我能相信的只有拿着锁的时候。 二、debug 心得 (这里的 心得 不是技术向的)上面那个 bug 花了我很大功夫打上 log 来排查,并且从打完 log 到发现 bug,解释 bug 修改 bug 又经历了一个痛苦的过程。甚至连定位错误都是一种奢望,...
2.4 Debug 辅助函数 为了方便检测SplitInsert 和 Merge 是否正常工作,我给ExtendibleHashTable写了一个内置的打印函数,打印出hashtable。 template <typename KeyType, typename ValueType, typename KeyComparator> void HASH_TABLE_TYPE::PrintTable() { // prinf auto directory_page = FetchDirectoryPage(); uint...
工业革命 这次debug用上了船新的lldb+vscode,体验是真的不错,比自己手动debug效率提高了好多好多。具体看博文:https://www.cnblogs.com/alyjay/p/16709127.html Extendible Hash Table 实现细节以及一些思考 对于key是从高位取比特还是从地位开始作为dir的index 在已经实现的IndexOf函数中,取的是地位比特作为index。...
这一步骤我使用的是vscode debug, 配合使用cout输出, 很方便. 这个问题我最让我花时间的地方是, 之前对cmake以及make的测试不够熟悉. 这里我测试的方式是进入CMU_15-445/build/test目录下, 然后我们可以找到每一个需要测试的测试文件, 实际上Project下面的Testing里面也有写, 我当时没注意看, 后来全靠自己猜的...
经过仔细研究DEBUG时的现象,大概琢磨出问题的来源在于下面这个情况。 image.png 所以DELETE的时候,SIBLING是一定要锁上的。 修改代码如下,就是无论是redistribute 还是 Coalesce 都不用去UNPIN了, 然后取SIBLING的时候,要加写锁,随后送进TRANSACTION PAGESET。最后统一释放。
并指定clang-12编译器路径。注意区分debug和release版本的构建,通过CMake Settings设置Build Directory和Build Type。在VSCode中,只能运行整个测试,而在CLion,可以直接点击测试代码段运行。总的来说,无论是VSCode还是CLion,都有各自的优点和适用场景,根据你的具体需求进行选择和配置。
lab1 分支1 标签0 lqbuffer pool1b4286d3年前 1 次提交 提交 .circleci buffer pool 3年前 .github buffer pool 3年前 build_support buffer pool 3年前 logo buffer pool 3年前 src buffer pool 3年前 test buffer pool 3年前 third_party ...
2021-02-18 16:53:47 [autograder/bustub/src/storage/disk/disk_manager.cpp:108:ReadPage] DEBUG - I/O error reading past end of file 1. 2. 复用frame 时清空元信息。在复用一个从 replacer 中驱逐的 frame 时尤其要注意,使用前一定要将 pin_count_\is_dirty_ 这些字段清空。当...
这里我写的时候忘记SET 他孩子的PARENT PAGE ID 为INVALID_PAGE_ID。后来DEBUG时发现。 image.png 综上B+树的删除写完了。我们还需要去PAGE里实现,PAGE的子方法。 叶子节点的比较简单粗暴,就是直接移动,然后更新NEXT PAGE ID即可。和MOVE HALF TO 差不多的套路,复制下来改改就好。
4、资源管理由于page leak实在恶心(debug费眼),所以我直接用raii来管理所有page。每次fetch由loacl varieble BPMGuard代理buffer_pool_manager_进行,fetch后把记录保存在自身数据结构内,在析构时统一unpin掉。delete则被push_back到全局链表,每次unpin检测pin_count是不是到0,如果到0就delete from memory。