2016-10-20 9 views
1

При создании с -fsanitize = address иногда я вижу проблемы с плохой памятью из классов libC++.Почему сайт, созданный с помощью сатинированной библиотеки C++, дает нерепродуцируемые проблемы ASAN в классах libcxx?

Ошибки не кажутся повторяемыми при запуске, а иногда и вовсе не происходят.

Что происходит? Как я могу это предотвратить?

ответ

1

«Если контейнеры libC++ пересекаются с инструментальными (перестроенными с помощью ASan) на неинструментный код, адрес Sanitizer может сообщать о ложных срабатываниях контейнера».

Если ваша программа связывается с библиотеками, созданными с помощью libC++ без ASAN, тогда при создании необходимо определить _LIBCXX_HAS_NO_ASAN.

См Why does Xcode define _LIBCPP_HAS_NO_ASAN when creating an address-sanitized build?

+2

Кроме того, ваш собственный код может быть причиной - если доступ вектора из границ проблемы может быть сообщенной в 'станд :: вектор :: операторе []', но фактический виновник вызывающий, который отвечает за проверку своих собственных границ. –

+0

Верно, я бы ожидал, что это будет повторяемо от запуска до запуска. – jbcoe