gcc v4.8.x 添加调试程序的选项:
-fsanitize=线程
启用 ThreadSanitizer,一个快速的数据竞争检测器。内存访问指令将用于检测数据竞争错误。有关详细信息,请参阅http://code.google.com/p/data-race-test/wiki/ThreadSanitizer 。
我在 Fedora 19 上的 gcc 版本:
gcc version 4.8.1 20130603 (Red Hat 4.8.1-1) (GCC)
将我的程序与以下命令(CMake 的输出)链接:
Linking C executable bin/ftu
/usr/bin/cmake -E cmake_link_script CMakeFiles/ftu.dir/link.txt --verbose=1
/usr/bin/cc -g -g -O0 -Wall -D_REENTRANT -rdynamic -fsanitize=thread -fPIE -pie CMakeFiles/ftu.dir/src/main/main.c.o -o bin/ftu -L/home/hl/ftu/arm/src/libapp/pc -rdynamic ../libapp/pc/libbase.a ../libapp/pc/libstbl.a ../libapp/pc/libstbl_utest.a ../libapp/pc/libbase_utest.a ../libapp/pc/libmem_utest.a ../libapp/pc/libmemspy_utest.a ../libapp/pc/libos_utest.a ../libapp/pc/libmain_utest.a ../libapp/pc/liblog_utest.a ../libapp/pc/libini_utest.a ../libapp/pc/libdsp_utest.a ../libapp/pc/libmstation_utest.a ../libapp/pc/libflist_utest.a ../libapp/pc/libdc_utest.a ../libapp/pc/libflist.a ../libapp/pc/libdsp.a ../libapp/pc/liblog.a ../libapp/pc/libini.a ../libapp/pc/libmstation.a ../libapp/pc/libdc.a ../libapp/pc/libmemspy.a ../libapp/pc/libmem.a ../libapp/pc/libos.a ../libapp/pc/libbase.a -lrt -lpopt -lpthread -Wl,-rpath,/home/hl/ftu/arm/src/libapp/pc
/usr/bin/ld: cannot find -ltsan
collect2: error: ld returned 1 exit status
Gcc 说“找不到 -ltsan”。libtsan 存在于哪里?
我在http://gcc.gnu.org/gcc-4.8/changes.html上找到了一些东西:
已添加 ThreadSanitizer,可通过 -fsanitize=thread 启用。将检测指令以检测数据竞争。ThreadSanitizer 在 x86-64 GNU/Linux 上可用。
-fsanitize=thread 仅支持 64 位 CPU。我的linuxuname -a
输出是:
Linux hl.zy 3.9.8-300.fc19.i686 #1 SMP Thu Jun 27 19:40:39 UTC 2013 i686 i686 i386 GNU/Linux
我的cpu是32位的,不支持!我对吗?