Dependent Origination

最近的bugs

Posted on: September 26, 2008

06/21/2006

昨天一个bug, 是这个样子的. 因为billing系统要同时和好几个server, database tables打交道, 所以我们写了一个coordinator class, 如果其中一个failure, 要把剩下的已经完成的工作都rollback. 这个主要目的是为了维护系统的integrity, 免得被一些常见的system problems搞得一团糟. 但是昨天呢, 发现一个bug, 在rollback之前, log error的时候, 要dump class content的时候就crash了. 所以rollback都没有执行, 留下很多烂七八糟的状态等着收拾.

我看了半天code, 直觉是something out of scope了. 但是我的毛病在这里, 直觉是对的, 但是要pinpoint exactly the place where the bug is. 我kind of就停在那里了. 后来老板来问我是怎么回事儿. 我说不清楚啊, 可能是something out of scope了. 老板就非常methodical, 因为是crash, 有core file, 开了gdb, 就查看class的内部状态. 这里面还要说gdb里面display stl classes好麻烦. 看老板用了无数的_M_imple, _M_start, 都不明白是怎么回事儿! 但是很明显有个variable是garbage content. 于是就要back up到calling class, 看看是怎么回事儿. 但是calling class是个abstract interface class, 在gdb里面很难搞. 我猜了一个type, 居然对了. 可是calling class里面就已经是garbage了. 这是怎么回事儿呢. 马上回到code上去, 看看这个参数是怎么passing的. 一下子就发现, calling class把这个参数定义为reference, 然后calling class的caller是把一个定义在栈上面的参数传了进来. 但是事实上, 在rollback的时候, 这个caller function已经out of scope了, 所以导致了garbage content.

解决方法非常简单, 改header file, 全部从reference变成stack上的variable啦. 但是这里面我的问题是要灵活运用不同的debugging tools. 我是很喜欢reading和printf的. 当然这里一个重要原因是一直没怎么学会比较高级的debuger是怎么用的. 我虽然知道可能的问题是什么, 但是要具体, 而且迅速的找到问题, 还是要综合运用工具. 还有就是, 直觉是不够的. 要拿出具体的问题和解决方案来. 下次不能再说我不知道是怎么回事儿了.

上个星期学到一样东西是Alarm clock. 具体的说, 我有一个工具程序, 要在production server上面运行很长时间. 可是每次我运行一阵子, 就打印一行”Alarm clock”, 然后程序就退出了. 很困惑. 后来把两个系统管理员找来, 他们也从来没见过. 于是我们就用strings来在executable里面找看谁有这个”Alarm clock”. 没有. 于是用ldd来看这个executable都连了哪些动态库, 一个一个库的strings, 最后发现是libc打印的这个消息. 而且是接受到了signal alarm才打印的. 原来因为我们的log rotation机制, 每两个小时发一个alarm, 程序应该handle这个signal, close log file and reopen one so that the old file can be moved. 我自己写的这个工具没有处理alarm信号. 所以才会有这种behavior. 开始大家都以为是因为我的程序运行太久了才这个样子. 老板还要我去用screen, 因为上次他也是见到这个样子的message, 然后就被log out了. 和我的不是一种情况. 他那个可能是ssl library干的.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

September 2008
M T W T F S S
« Dec   Oct »
1234567
891011121314
15161718192021
22232425262728
2930  

Twitter

  • is reflecting on the past three years and reading the article on divided self aptly showing up at the top of my tweeter feed. 4 months ago
  • is having a nice feeling of connecting dots all over the place. they are now illuminating the same point. 5 months ago
  • Style Transfer is fun! TensorFlow rocks! #WTM17 https://t.co/zYP0IFIDfp 7 months ago
  • couldn't get over the jetlag, sleeping during the day from seven to four, for days. 9 months ago
  • is emptying trash and happily discovering the available disk space now ranks at 100G+. 10 months ago

Flickr Photos

%d bloggers like this: