仅在多核上运行时才出现分段故障

时间:2009-11-17 06:29:20

标签: c++ multithreading segmentation-fault multicore

我正在使用一个多线程的c ++库,可以使用变量设置工作线程的数量。该库使用pthreads。当我在使用3个或更多线程的四核机器上运行应用程序(作为库的测试)时,会出现问题。应用程序退出时出现分段错误运行时错误。当我尝试在库的某些部分插入一些跟踪“cout”时,问题就解决了,应用程序正常完成。 在单核机器上运行时,无论使用多少线程,应用程序都能正常完成。

如何找出问题所在的位置?

是一种同步错误吗?我该怎么找到它?有没有我可以使用的工具检查代码?

3 个答案:

答案 0 :(得分:2)

听起来你正在使用Linux(你提到了pthreads)。您考虑过valgrind吗?

Valgrind拥有检查数据竞争条件(helgrind)和内存问题(memcheck)的工具。 Valgrind可能会在调试模式下发现这样的错误,而不需要产生释放模式产生的崩溃。

答案 1 :(得分:0)

一些常规调试建议。

  1. 确保您的构建有符号(使用-g编译)。此选项与其他构建选项正交(即,使用符号构建的决策与优化级别无关)。
  2. 一旦有了符号,请仔细查看发生seg错误的调用堆栈。为此,首先确保您的环境配置为生成核心文件(ulimit -c unlimited),然后在崩溃后,在调试器中加载程序/核心(gdb / path / to / prog / path / to / core) 。一旦你知道你的代码的哪一部分导致了崩溃,这应该可以让你更好地了解出现了什么问题。

答案 2 :(得分:0)

你正在遇到竞争状态 多个线程在同一资源上进行交互的情况 有许多可能的罪魁祸首,但没有来源,我们说的任何东西都是猜测。

您想要创建核心文件;然后使用核心文件调试应用程序。这将调试器设置为应用程序崩溃时的状态。这将允许您检查变量/寄存器等。

如何做到这一点将取决于您的系统。

Google快速透露了这一点:

http://www.codeguru.com/forum/archive/index.php/t-299035.html

希望这有帮助。