47得票3回答
我该如何在gdb中打断UBSan报告并继续执行?

最近版本的GCC和Clang都加入了Undefined Behavior Sanitizer (UBSan),它是一个编译选项(-fsanitize=undefined),会添加运行时仪器代码。当出现错误时,会显示如下警告: packet-ber.c:1917:23: runtime ...

27得票2回答
使用GCC未定义行为检测器

今天我读了一篇关于GCC未定义行为检测器(ubsan)的文章。然而,当我按照那里的步骤操作(将-fsanitize=undefined添加到我的代码中),编译器(Ubuntu 15.04上的GCC 4.9.2)说某些引用未定义:||=== Build: Debug in Project (co...

16得票2回答
这段简单的C++代码中存在数据竞争吗?

clang++和g++的内存检测器都对这段简单代码产生了类似的数据竞争警告。这是一个误报吗?问题出在哪里?代码:#include <thread> struct A { void operator()() { } }; struct B { voi...

16得票3回答
为什么启用未定义行为的消毒会干扰优化?

请考虑以下代码:#include <string_view> constexpr std::string_view f() { return "hello"; } static constexpr std::string_view g() { aut...

15得票3回答
Clang 8与MinGW-w64: 如何使用地址和UB(未定义行为)检测器?

Clang 8 release notes中有这样一句话: 允许在MinGW上使用地址和未定义行为Sanitizer。 然而,我无法弄清楚如何正确使用它们。 我正在使用带有MSYS2 MinGW GCC的Clang 8.0.0。确切的细节在问题底部。 我尝试编译以下...

13得票1回答
gcc引起的分段错误,由于对可变模板函数调用的lambda包装器。

我今天花了相当多的时间试图理解为什么g++6.2和g++7.0上这段代码会导致分段错误(segfaults),而在clang++3.9(以及4.0)上正常工作。 我将问题简化为一个85行自包含代码片段,在正常执行时不会出现分段错误,但在UBSAN下总是报告错误。 通过使用g++7编译,并启...

13得票2回答
为什么使用-fsanitize = undefined会导致“undefined reference to typeinfo”?

以下测试用例是从一个真实应用程序精简而来,使用-fsanitize=undefined(使用GCC 6.1.1)将无法链接,但不使用它则可以正常链接。有人能告诉我为什么吗?似乎与Qt / QObject、-fvisibility=hidden和-fsanitize=undefined的组合有关...

12得票1回答
C++ UBSAN检测派生对象时产生误报

我想使用UBSAN(未定义行为检查器),但发现它完全没有用,因为它报告了太多错误的警告。 例如,一个简单的std::make_shared<int>(42);就足以触发诸如下面的警告: 成员访问在地址0x00000236de70内,该地址不指向类型为“_Sp_counted_ba...

10得票1回答
Clang的UBSan和函数指针:这是非法的吗?

我试图通过从共享对象导出的C符号作为函数指针表来调用一些C++函数。实际上代码是可以工作的,但是Clang的未定义行为检测器(= UBSan)看到我所做的调用是非法的,如下:==11410==WARNING: Trying to symbolize code, but external sym...

10得票2回答
运行时错误:加载了一个值为127的值,这不是“bool”类型的有效值。

我在Debian 8的x86_64上使用g++ 4.9.2。我遇到了一个Undefined Behavior sanitizer (UBsan) (-fsanitize=undefined)错误: algebra.cpp:206:8: runtime error: load of value...