【发布时间】:2010-12-17 08:19:30
【问题描述】:
我正在使用一个多线程的 c++ 库,并且可以使用变量来设置工作线程的数量。该库使用 pthreads。当我在使用 3 个或更多线程的四核机器上运行作为库测试提供的应用程序时,就会出现问题。应用程序以分段错误运行时错误退出。当我尝试在库的某些部分插入一些跟踪“cout”时,问题得到解决,应用程序正常完成。 在单核机器上运行时,无论使用多少线程,应用程序都正常结束。
我怎样才能找出问题接缝的位置?
这是一种同步错误吗?我怎样才能找到它?有什么工具我也可以使用检查代码吗?
【问题讨论】:
-
从您的描述来看,这似乎是一种竞速状态,其中一个线程很可能正在尝试访问尚未被另一个线程初始化的内存。您可能想尝试在调试器下重现它并查看故障点的调用堆栈。
-
我真的不知道故障点在哪里,因为在调试模式下问题不会出现。
-
有些编译器在调试模式下会用它们的默认值初始化变量,所以在调试模式下可能不会发生这种情况
-
您可以在优化时包含调试符号,并且可以附加调试器,而不管其中任何一个。 “调试模式”用词不当。
-
当您获得 SEGFAULT 时,您可以让系统转储程序的核心,然后调试器可以加载该核心。不同的系统使用不同的方法来表示需要核心文件。但通常它就像设置环境变量一样简单。有关详细信息,请查看您的系统文档。
标签: c++ multithreading segmentation-fault multicore