Col*_*rst 7 c++ windows ubuntu address-sanitizer bash-on-windows
目前在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
}
Run Code Online (Sandbox Code Playgroud)
这是windows上bash的clang调用:
$clang++-3.5 -fsanitize=address -o1 -fno-omit-frame-pointer -g main.cpp -o main
$./main
Run Code Online (Sandbox Code Playgroud)
结果
==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)
Run Code Online (Sandbox Code Playgroud)
我喜欢关于如何使其工作的建议,或者我是否缺少工具链的一部分或其他东西.
如果失败,我想我将双启动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 - 看来问题在于 bash Windows 上的 ubuntu 对 /proc 文件系统的支持不完整。
失败的代码正在查看 /proc/self/maps - 实际上 - 似乎是正确的。
但是我发现 /proc 中的其他东西(例如网络)在 bashonwindowsonunix 上完全损坏了 - 所以我很确定这部分正在进行中。
| 归档时间: |
|
| 查看次数: |
705 次 |
| 最近记录: |