c – 地址清理程序不适用于Windows上的bash

前端之家收集整理的这篇文章主要介绍了c – 地址清理程序不适用于Windows上的bash前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
目前在 Windows上的Ubuntu Bash上运行llvm,clang,clang-format和clang-modernize.我想使用谷歌发布的一套清理工具,包括地址,内存和线程清理. fsanitize选项似乎都不起作用.

以下是ASAN的代码示例:

#include <stdlib.h>
int main() {
  char *x = (char *)malloc(10 * sizeof(char *));
  free(x);
  return x[5];// purposely accessing deallocated memory
}

这是windows上bash的clang调用

$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,因为Windows的clang缺少像std:out支持这样的简单功能,尽管理想情况下我希望能够为Windows目标和Linux目标编译.我想避免双启动,因为Ubuntu无法安装Windows存储空间,但它们似乎很好地服务于Windows上的Ubuntu bash.

解决方法

快速浏览一下源代码–MemoryMappingLayout :: Next – https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps_linux.cc – 看来问题是在windows上支持/ proc文件系统的ubuntu上的bash是不完整的.

失败的代码是查看/ proc / self / maps – 实际上 – 看起来是正确的.

但是我发现/ proc中的其他东西(例如网络)在bashonwindowsonunix上完全破坏了 – 所以我很确定这部分是正在进行的工作.

猜你在找的C&C++相关文章