我有一个使用 tbb 的 C++ 程序,我正在使用 GCC 6.2.1 在 64 位 Linux 上进行编译。当我使用 address sanitizer(-fsanitize=address) 编译并运行单元测试时,会生成以下输出:
...
[ PASSED ] 56 tests.
=================================================================
==12326==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 54 byte(s) in 3 object(s) allocated from:
#0 0x7f4c634fd020 in strdup (/usr/lib64/libasan.so.3+0x58020)
#1 0x301d215bb4 (/usr/lib64/libtbb.so.2+0x301d215bb4)
SUMMARY: AddressSanitizer: 54 byte(s) leaked in 3 allocation(s).
make[3]: *** [CMakeFiles/check] Error 1
make[2]: *** [CMakeFiles/check.dir/all] Error 2
make[1]: *** [CMakeFiles/check.dir/rule] Error 2
make: *** [check] Error 2
Run Code Online (Sandbox Code Playgroud)
代码是在关闭优化 (-O0) 和 -fno-omit-frame-pointer 的情况下编译的。我如何获得有关泄漏的更多信息?
作为自动化测试套件的一部分,我必须使用 OpenShift 的 REST API 来发送命令并获取 OpenShift 的状态。为了验证这些 API 调用,我需要在每次调用中嵌入一个授权令牌。
目前,我通过在安装了 OpenShift 的机器上使用 ssh 执行以下命令来获取此令牌:
oc login --username=<uname> --password=<password>
oc whoami --show-token
我想完全停止使用oc工具并使用对 API 的 HTTP 调用获取此令牌,但我真的无法找到解释如何使用它的文档。如果我--loglevel=10在调用 oc 命令时使用该选项,我可以看到oc登录时进行的 HTTP 调用,但是我很难从这些日志中对进程进行逆向工程。
从理论上讲,这不是 OpenShift 特有的内容,而是 OAuth 协议特有的内容,我找到了一些文档,例如此处发布的文档,但我仍然发现没有具体示例很难实现。
如果这有帮助,我正在使用 ruby(而不是 rails)开发这个工具。
PS 我知道通常对于这种类型的工作,应该使用服务帐户令牌,但由于这是一个测试环境,因此 OpenShift 安装经常被删除和重新安装。这将迫使我每次使用 oc 命令行工具重新创建服务帐户,并再次阻止我自动化该过程。
我正在开发一种产品,该产品由多个C ++可执行文件和相互依赖的各种库组成。我正在使用GCC和-fsanitize-address。据我了解,如果我想将地址清理器与库一起使用,则必须将其构建为共享对象(这是GCC的默认选项)。因此,我认为最好的选择是-static-libasan为可执行文件静态地构建地址清理器,并为库动态地构建地址清理器。但是,当我这样做时,在构建C ++可执行文件之一时出现链接错误:
==10823==Your application is linked against incompatible ASan runtimes
Run Code Online (Sandbox Code Playgroud)
这使我认为静态和动态版本的地址清除器不能与GCC混合使用,对吗?我在消毒剂GitHub页面上找不到关于此的任何信息。