在我使用clang version 3.4 (tags/RELEASE_34/final)
的已安装的 travis CI 上,我使用以下代码构建我的代码:
clang++ main.cpp -m64 -fsanitize=undefined -Werror -std=c++98 -pedantic -pedantic-errors -fvisibility=hidden -fstrict-aliasing -Weverything -Qunused-arguments -fcolor-diagnostics -O3 -DNDEBUG
(这个命令是compile_commands.json
从cmake生成的)
并在程序退出后的输出中出现一些数字(如内存的十六进制表示):
00 00 00 10 70 fb 01 00 00 00 00 10 70 fb 01
我的猜测是这是来自 UB sanitizer,因为当我使用 ASAN 构建或根本没有 sanitizer 时,所有这些数字都不存在。
那么它们是什么意思呢?如何诊断我的 UB 错误(如果确实如此)?
我认为当消毒剂遇到错误时,它会使程序崩溃并打印一条带有解释的大消息。那么这是什么?
这对我来说是一个交易破坏者,因为我将文本文件中的参考输出与当前构建的程序输出进行比较,这样的额外输出会破坏一切。
我尝试在本地使用 Clang 3.6,这是我的 Ubuntu 使用相同构建命令的默认设置,但是当我运行可执行文件时,我没有收到任何错误或此类额外输出。
这是 travis 的失败构建 - 我认为我的代码不相关,因为我的问题是消毒剂输出根本没有帮助。