问题标签 [msan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4459 浏览

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

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

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

我怎样才能使它正常工作?

Clang 3.5 版,stdlibc++ 6 版

0 投票
1 回答
3805 浏览

clang++ - 叮当记忆消毒剂;如何让它打印源代码行号

我正在编译我的程序,clang++ -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -g -O0当我运行它时,输出是:

我怎样才能让它像美丽的例子一样显示行号:http: //clang.llvm.org/docs/MemorySanitizer.html

我怀疑这可能是不可能的,因为我的程序是一大堆嵌套的 lambda:https ://github.com/matiu2/json--11/blob/master/tests.cpp

0 投票
1 回答
3609 浏览

c++ - Using -fsanitize=memory with clang on linux with libstdc++

With the system supplied libstdc++ the clang memory sanitizer is basically unusable due to false positives - eg the code below fails.

Building libstdc++ as described here:
https://code.google.com/p/memory-sanitizer/wiki/InstrumentingLibstdcxx

and running it like so:

gives the foolowing output

Both centos7 (epel clang) and ubuntu fail in this manner.

Is there something I'm doing wrong?

Previous stack overflow question Using memory sanitizer with libstdc++

edit Using @eugins suggestion, compile command line for this code is:


0 投票
1 回答
249 浏览

linux - clang memory sanitizer (linux) 不报告错误

我正在尝试在带有玩具程序的 linux 平台上产生 clang 内存清理程序错误。对于我认为正确的平台/编译/执行,我无法产生任何错误。

平台的简单描述:

  • docker容器中的debian 8
  • 标准铿锵包(3.5)
  • 使用这些指令编译的自定义 (msan) libc++ / libc++abi

问题是一个简单的测试程序不会报告错误。这是测试程序:

其中,未初始化的内存被读取。它是这样编译的:

该程序正在使用使用平台描述中链接的指令编译的 libc++ / libc++abi 库。

这是程序的输出:

我可以使用不正确的平台配置产生 clang memory sanitizer 误报错误,我理解这是预期的行为。当程序与未检测的 libc++ / libc++abi 链接时,会产生预期的误报。

0 投票
3 回答
2121 浏览

c++ - 记忆消毒剂

我在 Ubuntu 14.04 上使用带有 Clang 3.7.0 的 Memory Sanitizer。以下代码可以完美运行:

编译时

我期待一个错误。Memory Sanitizer 没有发现 ans 未初始化的事实吗?

谢谢你的帮助。

0 投票
2 回答
427 浏览

c++ - 无法从项目的示例项目中重现内存清理结果

我从 centos7 中得到完全相同的结果,clang-3.6.1 是使用 Fedora rpm 规范文件从源代码构建的。Ubuntu 14.04,clang-3.4

尽可能使用此处 wiki 的说明https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowTo 。该页面最后一次更新是在 6 个月前。

googlest 版本 613 仍在使用 tr1

将 googletest 更新为 tip (746) 并编译并带有以下警告

并且该页面中的琐碎建议案例没有被 msan 拾取

我有一个项目,其中 valgrind barfs 由于使用了一些非常大的 mmap,因此内存清理非常有用。如果我做错了什么。googletest 似乎以某种方式抑制了该错误。删除谷歌测试并将测试用例转换为

if(foo[4] == 'z') std::cout << "它是 z" << std::endl;

按预期触发明显错误的报告

是否可以将内存清理与单元测试库一起使用?

0 投票
1 回答
237 浏览

c - 如何确定何时使用 -fsanitize=memory?

我想在使用内存消毒剂时FD_ZERO清除误报。FD_SET清除它有点容易:

但是,我不知道如何检测内存清理程序何时使用。也就是说,检测何时-fsanitize=memory在命令行上指定。预处理器似乎没有帮助:

如何确定何时-fsanitize=memory使用?

0 投票
0 回答
332 浏览

c++ - centos 7上的内存清理程序误报但在其他平台上没有

我的测试代码如下:

我使用 GCC 7.2 工具链使用最新的 clang 进行编译。
clang++ -fsanitize=memory msan.cp

这本质上是一个问题的重现器,我看到尝试将内存清理程序集成到在 centos 7 服务器上运行的大型软件堆栈中。

这个小示例代码会产生以下错误:

但是,这只发生在 centos 服务器上,在我的本地 arch linux 系统上尝试此操作时,我没有看到任何错误并且它按预期工作。

服务器详情
glibc : 2.17-196.el7
uname -a::
Linux servername 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

我基本上没有想法,所以很乐意为我提供任何帮助,甚至是我可以尝试的建议。

谢谢!:)

0 投票
0 回答
316 浏览

cmake - 无法构建仅针对 compile-rt(无 libgcc)链接的带有内存清理工具的 libc++?

我想在带有 llvm 工具链(libc++、libunwind、compiler-rt、clang ...)的代码仓库上使用 c++ memory sanitizer(msa​​n)。所以我需要做的第一件事是构建msan-instrumented libc++。

MemorySanitizerLibcxxHowTo 开始,我需要使用选项-DLLVM_USE_SANITIZER=Memory-DLLVM_USE_SANITIZER=MemoryWithOrigin.

组装一个完整的 llvm 工具链,在LLVM’s compiler runtime library部分

如果使用 libc++ 和/或 libc++abi,您可能需要通过将 -DLIBCXX_USE_COMPILER_RT=YES 和/或 -DLIBCXXABI_USE_COMPILER_RT=YES 传递给 cmake,将它们配置为使用 compiler-rt 而不是 libgcc_s。否则,您最终可能会将两个运行时库都链接到您的程序中(这通常是无害的,但很浪费)。

由于我的目标是完整的 llvm 工具链,我认为我应该添加-DLIBCXX_USE_COMPILER_RT=YES-DLIBCXXABI_USE_COMPILER_RT=YES

所以我使用下面的脚本下载 libcxx 和 libcxxabi 并创建预期的目录布局并运行构建。

我得到的错误是:

此错误仅在两者都存在时-DLLVM_USE_SANITIZER=Memory发生-DLIBCXX_USE_COMPILER_RT=YES。删除其中任何一个都可以解决问题。

有什么办法可以解决问题并保留两个选项(msan 和编译器 rt)?提前致谢!

0 投票
0 回答
311 浏览

llvm - 由于 MemorySanitizer 警告,使用 MemorySanitizer 检测构建 libc++ 失败

我正在尝试使用 MemorySanitizer 工具构建 libc++,以便我可以使用 MemorySanitizer 构建自己的项目。我在 Ubuntu 16.04 上使用 Clang 8.01。

我按照此处给出的说明进行操作,但构建最初因链接器错误而失败。我通过使用 lld 而不是默认链接器更正了链接器错误。但是,由于 MemorySanitizer 警告,构建随后失败:

由于说明建议构建主干,我尝试构建最新版本标签(8.01),但这会产生完全相同的警告。问题似乎出在 GCC 的头文件中,所以也许我需要针对不同的标准库头文件进行编译?

我也尝试过这里的基本步骤,但发生了同样的错误。