多线程服务器中的分段错误

时间:2012-04-16 20:24:10

标签: c linux multithreading network-programming pthreads

我已经在Linux(Ubuntu 11.04 64位内核2.6.38)下为网络开发了一个多线程服务器(使用Pthreads)大约2个月。

此代码约为7000行C。我一直在网络中使用它,多个客户端连接到它并获得服务。它运行得非常顺利。

突然间我面临一些奇怪的问题。每隔一段时间(大约10次中有10次)服务器因分段故障而崩溃。我查看了所有代码,但似乎无法找到这背后的实际原因。任何人都可以指导我这里可能出现的问题或者我应该尝试找出实际的错误吗?

2 个答案:

答案 0 :(得分:3)

  1. 启用核心文件生成。当应用程序崩溃时,加载调试器
  2. 使用带内存检查的valgrind运行您的应用程序
  3. 编写单元测试。很多,并将覆盖率提高到100%。
  4. 使用valgrind's hellgrind对您的应用程序进行压力测试以测试多线程应用程序

答案 1 :(得分:1)

100%的覆盖率是不现实的,但85%-95%可以合理地发生勤奋。

关于为什么会发生奇怪的错误: http://stromberg.dnsalias.org/~strombrg/checking-early.html

你说这突然发生了。希望您一直在使用像Mercurial或Git或SVN这样的源代码控制系统。如果你有(或者你有夜间备份?),你可能应该回顾一下在问题开始时所做的更改,试图找到错误,这可能是一个未定义的内存引用。