需知:就算有的逻辑判断觉得没必要,也不妨写出来,因为多线程的运行确实难以预测,我能相信的只有拿着锁的时候。 二、debug 心得 (这里的 心得 不是技术向的)上面那个 bug 花了我很大功夫打上 log 来排查,并且从打完 log 到发现 bug,解释 bug 修改 bug 又经历了一个痛苦的过程。甚至连定位错误都是一种奢望,...
从最开始的各种数据结构的复习, 到C++移动构造函数这些语法的学习, 不管是学习还是复习, 用的还是蛮多的, 还有就是 Debug, 学会了使用LOG_DEBUG就开始偷懒提交到 GradeScope, 然后判断是否通过, 偷看一些中间日志, 不过有些地方确实可能只是思路不同.
还有一些DEBUG技巧,踩坑等等,包括使用gdb查看coredump,使用prof生成火焰图分析性能瓶颈。 整体代码规范、可读性很高。使用clang-format , clang-tidy规范代码(吐槽一下,函数返回值一定要用尾置返回)。cmake文件结构层次明了,cmake可以借鉴移植到自己的项目中。第三方库用到gtest、fmt、argparse等,还有一些自制的工具类...
*/voidDiskManager::ReadPage(page_id_tpage_id,char*page_data){std::scoped_lockscoped_db_io_latch(db_io_latch_);intoffset = page_id * PAGE_SIZE;// check if read beyond file lengthif(offset > GetFileSize(file_name_)) { LOG_DEBUG("I/O error reading past end of file");// std::...
{CMAKE_CXX_FLAGS} -std=c++1y") else() message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++1y support. Please use a different C++ compiler.") endif() # Create a new pre-processor macro __VTableFILE__ that has a truncated # path to reduce the size of the debug log ...
数据库系统的Buffer Pool和虚拟内存机制相似,但是目标却不同。因为数据库系统的数据本身就是存储在磁盘中,虚拟内存机制是为了在逻辑层面扩展计算机的计算资源,而Buffer Pool机制则是为了减少磁盘的I/O操作。(注意,Buffer Pool位于InnoDB存储引擎层,与MySQL8.0 版本摒弃的查询缓存不是同一个东西) ...
我的环境是vm虚拟机下装的ubuntu22.04,然后用vscode的ssh插件连接到虚拟机,git clone之后按照p0配置完插件之后没有遇到什么困难,debug用的是cmake tools插件提供的debug without a launch.json,debug方法参考cmake tools的READMEhttps://github.com/microsoft/vscode-cmake-tools.git ...
AbstractExpression *GetPredicate() // 结合Catlog可以得到当前Executor需要的表格内容 table_oid_t GetTableOid() AbstractExpression 表达式类,一颗表达式树中的节点,比如比较,聚合,或者常量,column元素。其中column表达式也作为了column类的成员之一。 不同的表达式实现的功能差距交大,这个是非常重要的一个类,每一个...
值得注意的是:你需要根据undo log的is_delete_以及TupleMeta的is_delete_判断此时重建是否成功。成功重建的情况有:undo_logs为空但tuple没有被删除 undo_logs不为空且最后一个undo_log没有被删除(无需考虑tuple是否被删除)在遍历undo logs时,你也无需考虑undo_log是否被删除,只需应用修改。
做lab的时候看了几个视频就开始撸了,磕磕撞撞写了好几天,差点想放弃,4个lab 里debug最痛苦的一个。并发B+树很难debug,因为你不可能中途把树结构可视化出来看。打log也不是那么方便,B+树那么多分裂合并操作,log很难看得明白是发生了什么。只有gdb看coredump能用用了。 很多地方当时没想明白,只是不断试错,...