问题标签 [sanitizer]
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++ - 哪些工具可以报告此类未初始化变量的使用?
考虑以下程序
显然它具有未定义的行为,我通常希望能够使用一些调试工具来捕获它。我已经尝试过 cppcheck(使用他们的在线演示)g++ -fsanitize=address
以及g++ -fsanitize=undefined
, 和valgrind
. 但是这些工具不会报告我x.d
在阅读时未初始化。
我可以使用哪些工具来捕获这些未定义的行为(最好在 Linux 上运行)?
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;
按预期触发明显错误的报告
是否可以将内存清理与单元测试库一起使用?
redis - 带有jemalloc的asan下的redis
我正在以 4 种不同的方式编译 Redis 3.0.6:
- 杰马洛克
- libc malloc
- asan + jemalloc (
-fsanitize=address -fno-omit-frame-pointer
) - asan + libc malloc
然后我redis-bench
在所有这些二进制文件下运行标准。我不明白的是,场景3
的性能非常接近场景1
。
有人可以向我解释这怎么可能?我在 asan 手册上没有找到任何不支持 jemalloc 或相关内容的内容。
sanitizer - 检查诸如 AddressSanitizer 之类的消毒剂是否处于活动状态
我有几个版本的项目检出和编译。如果我发现错误,我会比较版本以缩小问题范围。有时我会启用像 AddressSanitizer 这样的消毒剂。如果我重用一个可执行文件,我不记得它是否是用消毒剂编译的。如果可执行文件工作正常,我不确定该错误是否不存在,或者我是否没有在此构建中包含消毒剂。所以我必须重新配置和重建以确保我有消毒剂。
有没有办法检查可执行文件是否已使用消毒剂编译?
package - 对于 32 位,我需要将 clang 与 asan 一起使用什么包?
使用 clang++ 和编译时出现此错误-fsanitize=address -m32
:
我需要什么包裹?我已经尝试过libclang-3.6-dev
我也收到了 clang 3.7 的错误-m64
:
clang - 未定义的行为清理程序抑制文件:无法解析抑制
使用-fsanitize=undefined使用 clang 3.6 编译应用程序后,我尝试启动检测程序,同时使用抑制文件忽略一些错误:
抑制文件 ubsan.supp 包含:
这会导致错误消息:
gcc 4.9 版本也是如此。我能找到的唯一文档是http://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html,它适用于 clang 3.9,而我使用的是 3.6(其中不包含 ubsan 的文档)。
任何人都可以提供适用于 clang 3.6 的 ubsan 抑制文件的工作示例吗?
编辑:通过浏览 ubsan 的源代码,我发现唯一有效的抑制类型可能是“vptr_check”——但不知道我在看哪个版本。谁能确认在 clang 3.9 中有更多的抑制类型可用?
c++ - 标准::向量> push_back 给出堆缓冲区溢出
我正在尝试使用以下代码来解决hackerrank的偶数树任务以读取输入(std::cin
替换为自定义字符串数据以在此处将输入和程序代码放在一个位置):
第二个数字将是边数(后续数字对),因此我可以预测向量中需要多少元素。
此代码给了我以下消毒剂错误(与注释行相同的错误):
我在这里想念什么?
编辑
好的,所以我找到emplace_back
了默认std::vector<int>
的解决方案之一v
:
但是为什么它以前没有工作,因为使用size_type
cppreference的构造函数
3) 使用默认插入的计数 T 实例构造容器。不制作副本。
gcc - 如何使用以下 Address Sanitizer 输出解决我的程序中的分段错误?
这个问题是我之前的问题的续集,目前的状态是我已经获得了地址消毒剂的输出——由@Employed Russian 建议——如下所示。这是我第一次使用地址消毒剂,所以请原谅我的幼稚。
正如@Employed Russian 早些时候指出的那样,问题很可能出在堆栈上。现在,如何解决这个堆栈问题?因为这些都在我头上。
clang - 地址消毒剂警告
几天来,我在 Xcode 7.3 中启动 Address Sanitizer 时遇到以下问题。当 Sanitizer 发现问题(实际上被文件抑制)时,将错误消息打印到 Xcode 控制台:
==13392==警告:无法写入 fd 55 处的符号器
==13392==警告:无法写入 fd 55 处的符号器
==13392==警告:无法写入 fd 55 处的符号器
==13392==警告:无法写入 fd 55 处的符号器
==13392==警告:无法使用和重新启动外部符号!
我在存储库中找到了错误消息,但我仍然无法解释发生了什么。显然内部写入功能失败,但我不知道是什么原因造成的。有任何想法吗?
c++ - 为什么clang不能启用所有的消毒剂?
Clang有各种消毒剂,可以打开以在运行时发现问题。
但是,有些消毒剂我不能一起使用。这是为什么?
这没什么大不了的,但是当我运行单元测试时,它需要的时间比它应该的要长,因为我为相同的测试创建了多个二进制文件,并分别运行它们中的每一个。