Boost线程中的分段错误tls_destructor

时间:2010-01-04 20:17:10

标签: boost multithreading crash

我使用多线程HTTP服务器的Boost asio example(3)编写了一个小应用程序。如果我按下应用程序,我会定期得到一个seg错误。我知道我必须在某处覆盖内存,但不确定如何调试它。 GDB中的堆栈跟踪没有帮助。 GCC中是否有一些工具可以帮助我在dtor中点击它之前检测到腐败? (对不起,我主要是一个Java人)

感谢。在Debian Linux上使用Boost 1.38

PS这是堆栈跟踪


Program terminated with signal 11, Segmentation fault.
#0  0xb7f74389 in tls_destructor (data=0xb5200fc8) at libs/thread/src/pthread/thread.cpp:86
86                                      thread_info->tss_data=current_node->next;
(gdb) where
#0  0xb7f74389 in tls_destructor (data=0xb5200fc8) at libs/thread/src/pthread/thread.cpp:86
#1  0xb7f75351 in thread_proxy (param=0xb5200fc8) at libs/thread/src/pthread/thread.cpp:142
#2  0xb7c03240 in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#3  0xb7dc049e in clone () from /lib/tls/i686/cmov/libc.so.6
(gdb)

1 个答案:

答案 0 :(得分:1)

由于这是一个多线程程序,Boost升级可能只隐藏了一个真正的bug。我建议按顺序使用Valgrind Memcheck和Helgrind工具进行测试。第一个检查内存管理问题,第二个检查竞争条件。恕我直言是一个真正不可或缺的工具。