首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用gcc的线程消毒器会在启动时产生各种错误

使用gcc的线程消毒器会在启动时产生各种错误
EN

Stack Overflow用户
提问于 2016-07-30 01:54:29
回答 2查看 1.4K关注 0票数 1

我有一些奇怪的多线程bug,所以我想使用gcc线程消毒器来找到它们。但是,当我使用-sanitize=thread编译时,生成的二进制代码会立即出现以下堆栈跟踪错误:

代码语言:javascript
运行
复制
#0  0x0000000000000000 in ?? ()
#1  0x00007ffff5911cee in ?? () from /usr/lib/x86_64-linux-gnu/libtsan.so.0
#2  0x00007ffff593408d in ?? () from /usr/lib/x86_64-linux-gnu/libtsan.so.0
#3  0x00007ffff58eeb98 in ?? () from /usr/lib/x86_64-linux-gnu/libtsan.so.0
#4  0x00007ffff58ef0ce in __interceptor___cxa_atexit ()
   from /usr/lib/x86_64-linux-gnu/libtsan.so.0
#5  0x00007ffff55d1e56 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007ffff7de74ea in call_init (l=<optimised out>, argc=argc@entry=1, 
    argv=argv@entry=0x7fffffffdeb8, env=env@entry=0x7fffffffdec8)
    at dl-init.c:72
#7  0x00007ffff7de75fb in call_init (env=0x7fffffffdec8, argv=0x7fffffffdeb8, 
    argc=1, l=<optimised out>) at dl-init.c:30
#8  _dl_init (main_map=0x7ffff7ffe168, argc=1, argv=0x7fffffffdeb8, 
    env=0x7fffffffdec8) at dl-init.c:120
#9  0x00007ffff7dd7cfa in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#10 0x0000000000000001 in ?? ()
#11 0x00007fffffffe22b in ?? ()
#12 0x0000000000000000 in ?? ()

我尝试添加-static-libtsan属性,但现在收到以下错误:

代码语言:javascript
运行
复制
FATAL: ThreadSanitizer CHECK failed: ../../../../src/libsanitizer/sanitizer_common/sanitizer_allocator.h:1203 "((IsAligned(p, page_size_))) != (0)" (0x0, 0x0)
    #0 __tsan::TsanCheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) <null> (sql+0x0000004aeb53)
    #1 __tsan::TsanCheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) <null> (sql+0x0000004aeb5b)
    #2 __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) <null> (sql+0x0000004b3af3)
    #3 __tsan::user_free(__tsan::ThreadState*, unsigned long, void*, bool) <null> (sql+0x00000049e6fc)
    #4 operator delete(void*) <null> (sql+0x00000045f6ec)
    #5 __static_initialization_and_destruction_0(int, int) [clone .constprop.123] <null> (sql+0x00000044a4ab)
    #6 __libc_csu_init <null> (sql+0x00000254468c)
    #7 __libc_start_main <null> (libc.so.6+0x0000000207be)
    #8 _start <null> (sql+0x000000459e18)

我该如何解决这个问题呢?我在这里做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2018-04-19 01:47:46

我没有用过TSAN和gcc,所以没办法,但你可能想试一试clang (https://clang.llvm.org/)。由于TSAN是clang的一部分,bug往往首先在那里修复。

如果您需要帮助构建clang,我还写了一篇可能有用的文章:http://btorpey.github.io/blog/2015/01/02/building-clang/

票数 0
EN

Stack Overflow用户

发布于 2020-04-18 04:36:52

答案在这里:https://groups.google.com/forum/#!topic/thread-sanitizer/5cxyhIrl_SE

你不需要给-ltsan (至少在使用clang时)。编译和链接时都需要提供-fsanitize=thread。链接时的-fsanitize=thread将确保所有正确的库都被链接进来。

这对我来说,对于当和gcc都是有效的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38664803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档