GDB 自动化操作的技术

2016-05-28
阅读 5 分钟
18.2k
程序员在调试时往往分成两派,一派用debugger另一派用print。至于本人嘛,是一个“机会主义者”,有时用print,有时却改投debugger阵营。

使用Valgrind和ThreadSanitizer检测多线程错误

2016-05-11
阅读 8 分钟
9.8k
做毕设的时候,我曾经遇到一个多线程的BUG。这个BUG表现得较为诡异,会导致数据随机出错。由于找不出什么规律,一开始我还是挺头疼的。查了半天后我发现,相关的日志有多线程下共享数据访问问题的迹象(即所谓的data race),所以很快确诊是多线程部分代码存在逻辑错误。这个问题的解决办法很简单,就是把相关的代码revi...

货比三家:C++ 中的 task based 并发

2015-04-24
阅读 3 分钟
11.6k
上一篇文章中讲到, 我打算写一篇文章,聊聊async、packaged_task和promise的区别。所以现在我就来填坑了。 TL;DR async:提供最高层次的抽象。如果你不需要控制线程的运行时机,就选这个。 packaged_task:抽象层次比async低。如果你需要控制线程的运行时机,且线程执行的结果即目标结果时,选这个。 promise:抽象层次...

gtest快速上手

2014-12-31
阅读 5 分钟
17.6k
因为最近在写的一些C++代码,需要给它写单元测试,所以就得去找一个C++的测试框架。正好之前实验室的同学有推荐过gtest,所以就不纠结了,直接去gtest的项目主页看。

C/C++ - 压榨结构体的空间

2014-11-02
阅读 3 分钟
3.9k
先给几个数据: {代码...} 好,那么问题来了, {代码...} 输出的结果是多少? 这个问题对于写过C/C++的人来说,有点侮辱智商……好吧,不逗你玩了,直接进入正题。 输出的结果肯定不会是29(2 * 4 + 1 + 3 * 4 + 8)啦。都是Data structure alignment惹的祸。 Data structure alignment是个复杂的概念,简单来说,就是因为CP...