最近版本的GCC和Clang都加入了Undefined Behavior Sanitizer (UBSan),它是一个编译选项(-fsanitize=undefined),会添加运行时仪器代码。当出现错误时,会显示如下警告: packet-ber.c:1917:23: runtime ...
今天我读了一篇关于GCC未定义行为检测器(ubsan)的文章。然而,当我按照那里的步骤操作(将-fsanitize=undefined添加到我的代码中),编译器(Ubuntu 15.04上的GCC 4.9.2)说某些引用未定义:||=== Build: Debug in Project (co...
clang++和g++的内存检测器都对这段简单代码产生了类似的数据竞争警告。这是一个误报吗?问题出在哪里?代码:#include <thread> struct A { void operator()() { } }; struct B { voi...
请考虑以下代码:#include <string_view> constexpr std::string_view f() { return "hello"; } static constexpr std::string_view g() { aut...
Clang 8 release notes中有这样一句话: 允许在MinGW上使用地址和未定义行为Sanitizer。 然而,我无法弄清楚如何正确使用它们。 我正在使用带有MSYS2 MinGW GCC的Clang 8.0.0。确切的细节在问题底部。 我尝试编译以下...
我今天花了相当多的时间试图理解为什么g++6.2和g++7.0上这段代码会导致分段错误(segfaults),而在clang++3.9(以及4.0)上正常工作。 我将问题简化为一个85行自包含代码片段,在正常执行时不会出现分段错误,但在UBSAN下总是报告错误。 通过使用g++7编译,并启...
以下测试用例是从一个真实应用程序精简而来,使用-fsanitize=undefined(使用GCC 6.1.1)将无法链接,但不使用它则可以正常链接。有人能告诉我为什么吗?似乎与Qt / QObject、-fvisibility=hidden和-fsanitize=undefined的组合有关...
我想使用UBSAN(未定义行为检查器),但发现它完全没有用,因为它报告了太多错误的警告。 例如,一个简单的std::make_shared<int>(42);就足以触发诸如下面的警告: 成员访问在地址0x00000236de70内,该地址不指向类型为“_Sp_counted_ba...
我试图通过从共享对象导出的C符号作为函数指针表来调用一些C++函数。实际上代码是可以工作的,但是Clang的未定义行为检测器(= UBSan)看到我所做的调用是非法的,如下:==11410==WARNING: Trying to symbolize code, but external sym...
我在Debian 8的x86_64上使用g++ 4.9.2。我遇到了一个Undefined Behavior sanitizer (UBsan) (-fsanitize=undefined)错误: algebra.cpp:206:8: runtime error: load of value...