Адрес Sanitizer не сообщает об утечках в WSL 1 - PullRequest
0 голосов
/ 02 апреля 2020

Это простая проблема для воспроизведения. Мой старый друг, Address Sanitizer, который всегда был очень надежным, не сообщает об утечках в моей среде WSL 1.

❯ cat main.cpp
#include <cstring>
#include <iostream>

int main()
{
  auto p = new char[128];
  std::strcpy(p, "Hello, world!\n" );
  std::cout << p;
  return 0;
}
g++ -O0 -g -fsanitize=address main.cpp
❯ ./a.out
Hello, world!
❯

Это работает, ничего не сообщая, во всех моих обычных средах * IX всегда сообщается, что протечь. Различные другие попытки заставить его сообщить об утечке не удаются.

Я знаю, что дезинфицирующее средство есть и, по крайней мере, сторона работает, потому что я могу заставить его сообщать о таких вещах, как двойное удаление, несоответствие между версиями массива new / удалите как положено.

Мои версии:

❯ clang++ --version
clang version 9.0.0-2~ubuntu18.04.1 (tags/RELEASE_900/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
❯ g++ --version
g++ (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Я пробовал переключать версии clang и g cc без какого-либо эффекта. Кажется, не имеет никакого значения, собираю ли я с помощью clang ++ или g ++.

Похоже, это должно быть простой проблемой конфигурации, но я не смог Google найти свой путь к успеху.

Мне кажется, что проблема в том, что WSL 1 предоставляет несовершенный слой прокладок для управления системной памятью. Но это над моей головой.

...