Home

分布式调试之用gdb调试分布式系统

分布式系统开发的时候我们最经常遇到的问题就是,从一个server发送了一条报文之后怎么在另一个server查看这条报文的处理逻辑是否正确,单机的debug都不是问题,但是多机debug怎么做呢? 在ob团队里面,正常情况下我们有如下三种方式处理这些问题: 做mock,写单测,隔离开集群环境 加调试日志,部署集群环境,看日志。 非daemon模式下通过gdb调试。 这里我们详细说一下第三种。这也是最有效果的一种。 需要强调的是,正常情况下ob启动之后各个server会以守护进程方式运行,这时候如果用gdb启动server的话,gdb不知道在fork之后跟哪个进程,而在我测试下,set follow-fork-mode貌似也没成功过。 所以最好的方法是直接不要...

Read more

(转)天朝六十年编年史

作者: 李舒扬 高祖武帝开国元年 49 二月,王师入京,吏民欣喜。北土悉平。帝遣六军征南朝,号百万。 四月,六军涉江,灭南朝。南酋蒋氏遁,入海,据澎湖以抗圣化。迁九鼎于京。江南诸道初定。 十月,帝登基于天丨安门。入太庙,誓,立政,改元“开国“。周文正公相。封六辅政亲王。 王曰:“华夏诸民今日立也!“ 十一月,大将军刘,西路招抚使邓统王师十万入蜀,前朝余孽星散,蜀,滇,黔传徼而定。 邓平公封西南节度使,坐镇西南以图吐蕃。 是年,帝下《别了,司徒雷登》等三诏,用赐西夷美利坚使,夷使惭去。史称“三诏去西夷”。 高祖武帝开国二年 50 二月,北狄俄罗斯遣使来朝,盟,世世代代约为兄弟之邦。 六月,高丽内乱。帝诏命停战,不听。 九...

Read more

Oceanbase迭代器说明

所有迭代器的类图如下所示: ObRootTabletIterator 所有tablet类迭代器,也就是ObRootTableIterator, ObTableTabletIterator等的直接父类,定义了迭代接口。 ObTableTabletIterator 最基本的迭代器,继承ObRootTabletIterator, 负责迭代一个表的所有(或者某个指定range里面的)Tablet。 ######实现机理 : 从Rowkey::MINROWKEY开始,每次迭代的tablet的endkey(加一个ObRowkey::MIN_OBJECT防止找到同一个)作为下次迭代的起始值。 ######错误码与错误原因对应 断言失败: 接受返回值的传入参数table...

Read more

通过脚本统计代码覆盖率

只是记录一下工作里面的一些trick。我发现我对这些trick的兴趣无比的高。 我们有时候需要在开发机上统计代码覆盖率,这可能是做测试的同学经常的工作,做开发的同学也难免会遇到。对于某些分支复杂的逻辑,代码覆盖工具是极大的助力。 关于gcc coverage选项和gcov/lcov工具的使用已经在 上篇文章里面说过了,我们这里说的是如何实现方便的统计和拉取数据并显示。 首先,测试目录和代码目录是分开的,我们在测试目录运行的时候会生成测试文件的代码覆盖率统计,但是实际上被测试的文件的代码覆盖率是在源码目录生成的。这是需要注意的一点,之前我考虑过合并两处的代码覆盖率统计文件,后来发现没有必要,毕竟你关注的是源码目录的统计文件。这样我们通过如下脚本实现代码覆盖率的生成和拉取。 #...

Read more

测试覆盖率统计

###什么是代码覆盖率(code coverage) 代码覆盖(Code coverage)是软件测试中的一种度量,描述程式中源代码被测试的比例和程度,所得比例称为代码覆盖率。 代码覆盖主要包括如下四个方面: 语句覆盖(StatementCoverage) 判定覆盖(DecisionCoverage) 条件覆盖(ConditionCoverage) 路径覆盖(PathCoverage) 或者叫条件/判断覆盖率 具体的参见参考文献1 2. ###怎么得到覆盖率数据 这里我们主要说测试工具的使用的问题。c++的项目测试里面我们用gcc产生测试数据,用gcov和lcov生成测试结果的报表。 gcc这里需要做的工作是编译的时候打...

Read more

git reset和git revert

git reset 作用 git reset 主要完成到版本库某个特定版本的回退,分为如下三种方式 git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息 git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可 git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容 git revert 作用 git revert从字面的理解上跟git reset是一样的,不同之处在于git revert生成一个反向的差异(特...

Read more