В настоящее время работает на Ubuntu Bash в Windows, используя llvm, clang, clang-format и clang-modernize. Я хотел бы использовать набор инструментов для дезинфекции, выпущенных Google, в том числе адрес, память и дезинфекцию потоков. Кажется, ни один из параметров fsanitize не работает.
Вот пример кода для ASAN:
#include <stdlib.h>
int main() {
char *x = (char *)malloc(10 * sizeof(char *));
free(x);
return x[5];// purposely accessing deallocated memory
}
Вот вызов clang в bash для windows:
$clang++-3.5 -fsanitize=address -o1 -fno-omit-frame-pointer -g main.cpp -o main
$./main
Результаты
==70==Sanitizer CHECK failed: build/buildd/llvm-toolchain-snapshot-3.5/projects/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_linux.cc:211 ((IsOneOf(*current_, 's', 'p'))) != (0)(0,0)
Я бы с радостью посоветовал, как заставить его работать, или мне не хватает части цепочки инструментов или чего-то еще.
В противном случае я полагаю, что буду использовать двойную загрузку Ubuntu или Debian, потому что в Clang для Windows отсутствуют простые функции, такие как поддержка std: out, хотя в идеале я хотел бы иметь возможность компилировать как цели Windows, так и цели Linux. Я бы хотел избежать двойной загрузки, поскольку Ubuntu не может монтировать пространства хранения Windows, но они, похоже, достаточно хорошо подходят для Ubuntu bash на Windows.
Быстрый взгляд на исходный код — MemoryMappingLayout :: Next — https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps_linux.cc — Похоже, проблема в том, что bash в Ubuntu для Windows поддержка файловой системы / proc является неполной.
Код, который терпит неудачу, просматривает / proc / self / maps — что на самом деле — кажется правильным.
Но я обнаружил, что другие вещи (например, сеть) в / proc полностью не работают на bashonwindowsonunix — так что я уверен, что эта часть находится в стадии разработки.
Других решений пока нет …