gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 21:09:34 26 4
gpt4 key购买 nike

当我尝试运行带有内存完整性检查的 go 单元测试系统时,我收到一条错误消息,我确信我可以通过将编译器设置为 CLANG 来解决该问题。
Go Command Documenation关于这个问题有点简短。

-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 下使用内存清理器运行我的 golang 测试?

我目前正在使用以下版本的工具:
$ go version
go version go1.14 linux/amd64
$ clang --version
clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

最佳答案

它需要一个支持 -fsanitize=memory 的 LLVM 版本,适用于您运行该程序的 Ubuntu 18.04 版本。请尝试更新,然后再试一次。
另请注意,在 Linux 上,您至少需要 LLVM 3.8 才能获得 -fsanitize 标志。
Go 工具会根据 clang 链接的要求自动将 -fsanitize=memory 选项添加到 CGO_CPPFLAGS 标志,这就是它导致您出错的地方。
此外,请确保同时添加 CC 和 CXX(用于 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 文件)
它将帮助您测试 sanitizer 是否适用于您的设置。

关于unit-testing - 如何在 Ubuntu 18.04 上使用 -msan 选项运行 go test?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63059865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com