Boost 线程中的分段错误 tls_destructor

Posted

技术标签:

【中文标题】Boost 线程中的分段错误 tls_destructor【英文标题】:Segmentation Fault in Boost Threads tls_destructor 【发布时间】:2011-01-01 09:30:46 【问题描述】:

我使用多线程 HTTP 服务器的 Boost asio example(3) 编写了一个小应用程序。如果我 ctrl-c 应用程序,我会定期收到一个段错误。我知道我必须在某处覆盖内存,但不确定如何调试它。 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)

【问题讨论】:

Boost 线程最近修复了许多错误。尝试更新版本。 【参考方案1】:

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

【讨论】:

以上是关于Boost 线程中的分段错误 tls_destructor的主要内容,如果未能解决你的问题,请参考以下文章

C++ boost线程在实例化两次时导致分段错误

Boost::python 和 Eigen/dense 创建分段错误

C++ 11 Boost 1.65 recursive_directory_iterator 给出分段错误错误

Boost.Asio UDP async_read_from 分段错误

notify_all 导致分段错误

Boost Python自己的模块抛出分段错误`GlobalError::PushToStack()`