走下神坛的内存调试器定位多线程内存越界问题实践总结.docxVIP

  • 23
  • 0
  • 约 10页
  • 2016-11-26 发布于重庆
  • 举报

走下神坛的内存调试器定位多线程内存越界问题实践总结.docx

走下神坛的内存调试器定位多线程内存越界问题实践总结

定位多线程内存越界问题实践总结 2013/2/4 杨志丰  HYPERLINK mailto:yangzhifeng83@ yangzhifeng83@ 关键字 多线程,内存越界,valgrind,electric-fence,mprotect,libsigsegv,glibc 最近定位了在一个多线程服务器程序(OceanBase MergeServer)中,一个线程非法篡改另一个线程的内存而导致程序core掉的问题。定位这个问题花了整整一周的时间,期间历经曲折,尝试了各种内存调试的办法。往往感觉就要柳暗花明了,却发现又进入了另一个死胡同。最后,使用强大的mprotect+backtrace+libsigsegv等工具成功定位了问题。整个定位过程遇到的问题和解决办法对于多线程内存越界问题都很典型,简单总结一下和大家分享。只对终极组合秘技感兴趣的同学,请直接阅读最后一节,其他的章节写到这里是为了科普。 现象 core是在系统集成测试过程中发现的。服务器程序MergeServer有一个50个工作线程组成的线程池,当使用8个线程的测试程序通过MergeServer读取数据时,后者偶尔会core掉。用gdb查看core文件,发现core的原因是一个指针的地址非法,当进程访问指针指向的地址时引起了段错误(segment fault)。见下图。 发生越界的指针ptr_位于一个叫做cnam

文档评论(0)

1亿VIP精品文档

相关文档