登录
首页 >  Golang >  Go问答

在 Ubuntu 18.04 上如何使用 -msan 选项进行 Go 测试?

来源:stackoverflow

时间:2024-03-03 18:27:27 406浏览 收藏

从现在开始,我们要努力学习啦!今天我给大家带来《在 Ubuntu 18.04 上如何使用 -msan 选项进行 Go 测试?》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!

问题内容

当我尝试运行带有内存健全性检查的 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 下使用内存清理程序运行 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

解决方案


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

另请注意,在 linux 上,您至少需要 llvm 3.8 才能获取 -fsanitize 标志。

go 工具会根据 clang 链接的要求,自动将 -fsanitize=memory 选项添加到 cgo_cppflags 标志,这就是它会导致错误的地方。 p>

此外,请确保添加 cccxx(对于 clang++)标志,以便启用使用 clang 进行编译 em> 当你的程序与c/c++互操作时,即,

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 文件)

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

本篇关于《在 Ubuntu 18.04 上如何使用 -msan 选项进行 Go 测试?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>