2010-01-04 136 views
4

我用多线程HTTP服务器的Boost asio example(3)写了一个小应用程序。定期我得到一个seg错误,如果我按ctrl-c该应用程序。我知道我必须在某处覆盖内存,但不知道如何调试它。 GDB中的堆栈跟踪没有帮助。 GCC中有一些工具可以帮助我在检测到腐败之前将其击中在Dtor中? (对不起,我大多是爪哇人)Boost线程中的分段错误tls_destructor

谢谢。在Debian Linux上

PS使用Boost 1.38这里是堆栈跟踪


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

Boost线程最近修复了很多错误。尝试更新的版本。 – 2010-01-04 20:28:21

回答

1

由于这是一个多线程程序,有能够提升只能升级躲在一个真正的错误的可能性。我建议按照顺序使用Valgrind Memcheck和Helgrind工具进行测试。第一个检查内存管理问题,第二个检查竞争情况。恕我直言,一个真正不可或缺的工具。