标签: memory-sanitizer

将内存清理程序与libstdc ++一起使用

我希望使用-fsanitize=memoryclang中的标志来分析如下的程序:

#include <string>
#include <iostream>
#include <fstream>
using namespace std;

void writeToFile(){
    ofstream o;
    o.open("dum");
    o<<"test"<<endl; //The error is here.
                     //It does not matter if the file is opened this way,
                     //or with o("dum");
    o.close();
}
int main(){
    writeToFile();
}
Run Code Online (Sandbox Code Playgroud)

据我所知,这个程序是正确的,但是当我使用clang++ san.cpp -fsanitize=memory它时失败(在运行时):

UMR in __interceptor_write at offset 0 inside [0x64800000e000, +5)  
==9685== WARNING: MemorySanitizer: use-of-uninitialized-value  
    #0 0x7f48d0899ae5 (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0x7bae5)  
    #1 0x7f48d08d1787 (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0xb3787)  
    #2 0x7f48d08d21e2 (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0xb41e2)  
    #3 0x7f48d08cfd1e (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0xb1d1e)  
    #4 0x7f48d08b1f2d (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0x93f2d)  
    #5 0x7f48d16d60f5 in writeToFile() /home/daniel/programming/test/santest.cpp:10 …
Run Code Online (Sandbox Code Playgroud)

c++ libstdc++ clang++ msan memory-sanitizer

28
推荐指数
2
解决办法
3300
查看次数

记忆/地址Sanitizer vs Valgrind

我想要一些工具来诊断用户免费后的错误和未初始化的错误.我正在考虑Sanitizer(记忆和/或地址)和Valgrind.但我对它们的优点和缺点一无所知.谁能说出Sanitizer和Valgrind的主要特征,差异和优缺点?

编辑:我发现了一些比较:Valgrind使用DBI(动态二进制检测),Sanitizer使用CTI(编译时检测).无论Sanitizer的运行速度比Valgrind(2x)快得多,Valgrind都能让程序慢得多(20倍).如果有人能给我一些更重要的要点,那将是一个很大的帮助.

valgrind address-sanitizer memory-sanitizer

25
推荐指数
1
解决办法
9158
查看次数

如何使 MemorySanitizer 在出现错误后不停止

Clang 的文档说“默认情况下,MemorySanitizer 在第一次检测到错误时退出”。

有人知道如何使 MemorySanitizer 不因错误而停止吗?上面这句话表明有一种方法,但我在文档中没有找到任何内容。

clang sanitizer clang++ memory-sanitizer

3
推荐指数
1
解决办法
2924
查看次数