为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Ubuntu 18.04 上使用 -msan 选项运行 go test?

如何在 Ubuntu 18.04 上使用 -msan 选项运行 go test?

Go
青春有我 2022-06-21 09:51:21
当我尝试运行带有内存完整性检查的 go 单元测试系统时,我收到一条错误消息,我确信我可以通过将编译器设置为 CLANG 来解决该错误消息。Go 命令文档对此事做了一些简短的介绍。-msan    enable interoperation with memory sanitizer.    Supported only on linux/amd64, linux/arm64    and only with Clang/LLVM as the host C compiler.    On linux/arm64, pie build mode will be used.在过去,我使用我通过调用来实现它:CC=clang go test -msan ./..但是,当我现在这样做时,会出现以下错误:g++: error: unrecognized argument to -fsanitize= option: ‘memory’为了在 Ubuntu 18:04 下使用 memory sanitizer 运行我的 golang 测试,我需要做什么?我目前正在使用以下版本的工具:$ go versiongo version go1.14 linux/amd64$ clang --versionclang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)Target: x86_64-pc-linux-gnuThread model: posixInstalledDir: /usr/bin
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

它需要一个支持-fsanitize=memory在程序运行的Ubuntu 18.04版本上的 LLVM 版本。请尝试更新,然后重试。

另请注意,在Linux上,您至少需要LLVM 3.8才能获得-fsanitize标志。

Go工具会根据clang 的要求自动将 -fsanitize=memory 选项添加到CGO_CPPFLAGS标志以进行链接,这就是导致您出错的地方。

此外,请确保添加CCCXX(对于clang++)标志,以便在您与C/C++互操作程序时使用Clang启用编译,即,

CC=clang CXX=clang++ go build -msan

也请参考此链接

https://go.googlesource.com/go/+/go1.7/misc/cgo/testsanitizers/test.bash(bash脚本)

(或者)

https://github.com/golang/go/tree/master/misc/cgo/testsanitizers(*.go文件)

它将帮助您测试消毒剂是否适用于您的设置。


查看完整回答
反对 回复 2022-06-21
  • 1 回答
  • 0 关注
  • 262 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信