Как использовать поток-дезинфицирующее средство gcc v4.8.1?
gcc v4.8.x добавить параметры отладки программы:
-fsanitize=нить
включить ThreadSanitizer, быстрый детектор гонки данных. Инструкции по доступу к памяти будут использоваться для обнаружения ошибок гонки данных. См.http://code.google.com/p/data-race-test/wiki/ThreadSanitizer Для больше деталей.
моя версия gcc на Fedora 19:
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". Где существует либцан?
Я нашел кое-что на http://gcc.gnu.org/gcc-4.8/changes.html:
ThreadSanitizer был добавлен и может быть включен через-fsanitize=thread. Инструкции будут использоваться для обнаружения гонок данных. ThreadSanitizer доступен на x86-64 GNU / Linux.
- fsanitize=thread поддерживает только 64-битный процессор. Мой linux uname -a
выход есть:
Linux hl.zy 3.9.8-300.fc19.i686 #1 SMP Чт 27 июня 19:40: 39 UTC 2013 i686 i686 i386 GNU/Linux
мой процессор 32bit, это не поддержка! Я прав?
1 ответов
Я сделал некоторые исследования:
- Я нашел следующее на http://gcc.gnu.org/gcc-4.8/changes.html:
ThreadSanitizer был добавлен и может быть включен через-fsanitize=thread. Инструкции будут использоваться для обнаружения гонок данных. ThreadSanitizer доступен на x86-64 GNU / Linux.
- fsanitize=поток поддерживается только на 64-битном процессоре. Мой linux uname -a
выходы:
Linux hl.zy 3.9.8-300.fc19.i686 #1 SMP Чт 27 июня 19:40: 39 UTC 2013 i686 i686 i386 GNU/Linux
мой процессор 32 бит не поддерживается!
- Я проверил конфигурацию компилятора, как сказал Джонатан Леффлер
ниже выводится "gcc-dumpspecs / grep tsan":
%{fsanitize=thread:%{static-libtsan:%{!shared:-Bstatic --whole-archive \
-ltsan --no-whole-archive -Bdynamic}}%{!static-libtsan:-ltsan}}}} %o
но я не понимаю вывода.
-
Я установил бит Fedora 19 64, вы можете установить
libtsan
:sudo yum install libtsan.x86_64
Concusion:
- fsanitize=поток теперь поддерживается только на 64-битном gcc.