问题标签 [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.
c++ - 将内存清理程序与 libstdc++ 一起使用
我希望使用-fsanitize=memory
clang 中的标志来分析如下程序:
据我所知,这个程序是正确的,但是当我使用clang++ san.cpp -fsanitize=memory
它时(在运行时)它失败了:
我怎样才能使它正常工作?
Clang 3.5 版,stdlibc++ 6 版
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
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:
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 链接时,会产生预期的误报。
c++ - 记忆消毒剂
我在 Ubuntu 14.04 上使用带有 Clang 3.7.0 的 Memory Sanitizer。以下代码可以完美运行:
编译时
我期待一个错误。Memory Sanitizer 没有发现 ans 未初始化的事实吗?
谢谢你的帮助。
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;
按预期触发明显错误的报告
是否可以将内存清理与单元测试库一起使用?
c - 如何确定何时使用 -fsanitize=memory?
我想在使用内存消毒剂时FD_ZERO
清除误报。FD_SET
清除它有点容易:
但是,我不知道如何检测内存清理程序何时使用。也就是说,检测何时-fsanitize=memory
在命令行上指定。预处理器似乎没有帮助:
如何确定何时-fsanitize=memory
使用?
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
我基本上没有想法,所以很乐意为我提供任何帮助,甚至是我可以尝试的建议。
谢谢!:)
cmake - 无法构建仅针对 compile-rt(无 libgcc)链接的带有内存清理工具的 libc++?
我想在带有 llvm 工具链(libc++、libunwind、compiler-rt、clang ...)的代码仓库上使用 c++ memory sanitizer(msan)。所以我需要做的第一件事是构建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)?提前致谢!