我正在使用一个多线程的c ++库,可以使用变量设置工作线程的数量。该库使用pthreads。当我在使用3个或更多线程的四核机器上运行应用程序(作为库的测试)时,会出现问题。应用程序退出时出现分段错误运行时错误。当我尝试在库的某些部分插入一些跟踪“cout”时,问题就解决了,应用程序正常完成。 在单核机器上运行时,无论使用多少线程,应用程序都能正常完成。
如何找出问题所在的位置?
是一种同步错误吗?我该怎么找到它?有没有我可以使用的工具检查代码?
答案 0 :(得分:2)
听起来你正在使用Linux(你提到了pthreads)。您考虑过valgrind吗?
Valgrind拥有检查数据竞争条件(helgrind)和内存问题(memcheck)的工具。 Valgrind可能会在调试模式下发现这样的错误,而不需要产生释放模式产生的崩溃。
答案 1 :(得分:0)
一些常规调试建议。
答案 2 :(得分:0)
你正在遇到竞争状态 多个线程在同一资源上进行交互的情况 有许多可能的罪魁祸首,但没有来源,我们说的任何东西都是猜测。
您想要创建核心文件;然后使用核心文件调试应用程序。这将调试器设置为应用程序崩溃时的状态。这将允许您检查变量/寄存器等。
如何做到这一点将取决于您的系统。
Google快速透露了这一点:
http://www.codeguru.com/forum/archive/index.php/t-299035.html
希望这有帮助。