问题标签 [address-sanitizer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
15302 浏览

macos - OS X 上的 Clang 地址清理程序

我想在 OSX Mountain Lion 上使用 clang address sanitizer,因为 Valgrind 在这个平台上的内存检查有问题。但是当我-fsanitize=address在编译期间(就像我在这个页面上看到的那样: http: //clang.llvm.org/docs/AddressSanitizer.html),我得到了这个错误:clang: error: argument unused during compilation: '-fsanitize=address'

所以,我的问题是如何在 OS X 上使用 Clang Address Sanitizer?如果我不能使用它,我可以使用什么工具?

我已经用 Xcode 下载了 clang,它是最新的。(也许这个版本没有解决它构建的消毒剂)

0 投票
2 回答
1495 浏览

macos - 使用命令行 clang、OS X 10.9.1、Xcode 5.0.2

我想使用 clang 的 -fsanitize=address 功能。

我上线了:

我正在从命令行运行 clang,但出现错误:

有人告诉我这行得通,但是四处寻找并没有给我指明方向;我需要引入不同版本的clang吗?

谢谢!

0 投票
3 回答
15090 浏览

c++ - GCC 中地址清理程序的有意义的堆栈跟踪

我刚刚尝试使用 GCC 和-fsanitize=address标志进行编译。当我运行我的程序时,地址清理程序发现了一个缺陷,但堆栈跟踪没有帮助。如何配置它以使其指向我需要查看的源代码位置?

0 投票
3 回答
16372 浏览

macos - 如何使 AddressSanitizer 在出现一个错误(和其他问题)后不停止

我正在运行 OS X,10.8.5;我已经通过自制软件(clang 版本 3.4 (tags/RELEASE_34/final))安装了 llvm 3.4,并且正在使用 -fsanitize=address 进行构建。我可以使用简单的演示程序,但是在针对我们的代码库进行构建时,我遇到了几个问题(尽管我真的很想回答 #1):

  1. 第 3 方库正在生成 asan 错误,并且 asan 在第一次出现时终止我的应用程序。我认为会有某种(运行时/编译时)选项告诉 asan 在发现错误后继续前进。具体来说,我看到了这个:

    此错误不会导致应用程序在未经处理的情况下终止。

  2. 使用 -fsanitize=undefined(或 -fsanitize=address,undefined)选项时,我无法获取要链接的代码。我在我的编译和链接命令中都包含了 -fsanitize=undefined 行,但是我得到了链接错误,例如:

    /li>
  3. 我无法让黑名单工作,而且 -mllvm -asan-globals=0 或 -mllvm -asan-stack=0 似乎没有像我预期的那样工作。例如,后者不会抑制上面 #1 中列出的错误的生成,并且创建一个如下所示的黑名单也不会抑制错误:

    /li>
  4. 最后,使用这些 asan 选项生成的可执行文件会导致 lldb 崩溃。我正在使用 XCode 5 工具附带的 lldb;homebew llvm 包没有部署 lldb,我不知道如何构建它。构建说明在此处输入链接描述有一个指向您应该使用的源的死链接;直接从 svn 存储库中提取源代码,使用:

    导致代码无法编译(根据要求提供错误)。

0 投票
2 回答
1351 浏览

gdb - 如何从列出的 libunwind 和 AddressSanitizer 中获取行号+偏移量?

我经常从 libunwind 或 AddressSanitizer 获取堆栈跟踪,如下所示:

我知道如果我将 gdb 附加到仍然存在的进程,我可以使用它来获取有关位置的详细信息:

但是如果进程已经死了,我不能只是在 gdb 下重新启动它并使用上面的方法,因为地址随机化会使我得到错误的结果(至少,这是我的假设;我显然没有得到有意义的位置)。所以,我尝试了

但是,这要么没有列出任何内容,要么显然是错误的位置。这听起来很简单,但我没有找到答案:-( 平台是 64 位 Linux,但我想这适用于任何平台。

0 投票
2 回答
9166 浏览

debugging - 使用 AddressSanitizer 输出获取行号?

我试图让 AddressSanitizer 在其堆栈跟踪中生成行号。我已经在 Mac 和 Fedora 19 系统上进行了尝试,并且得到了类似的结果。

这是一个简单的程序:

我编译它:

然后我运行它(llvm-symbolizer 在我的路径中):

如您所见,我有符号但没有行号。如何获取行号?

在回答一个问题时,这里是objdump -h x

0 投票
5 回答
9912 浏览

c - 如何使用 clang 的 -fsanitize=address 在调试输出中获取行号?

我正在尝试调试clangwith检测到的内存错误asan,但valgrind. 但我无法让我clang构建的二进制文件为我提供任何有用的调试信息。我可以用一个简短的测试程序来证明这一点:

(很明显这个错误被 发现valgrind,纯粹是为了说明问题clang。)

我用 Clang 3.4-1ubuntu1 编译它,如下所示:

果然,./test中止,我看到一些调试信息:

但我真正想知道的是发生错误的行号,以及分配内存的位置。

如何从clang+获取此信息asan

0 投票
0 回答
65 浏览

c++ - 从主干编译clang时出错

我在编译clang时遇到了错误。似乎为 iOS 模拟器编译的地址清理程序存在问题。我看不出有任何理由链接到 x86_64 的 libclang.dylib。以前有人见过吗?或者有没有办法关掉它?

0 投票
2 回答
2322 浏览

gcc - 使用 GCC 4.8.2 的 Asan 时堆栈跟踪中未解析的符号

我在这个教程的帮助下尝试寻找错误:https ://fuzzing-project.org/tutorial2.html

当我使用地址清理器时,堆栈跟踪上没有任何符号解析。

我尝试了此处描述的操作:针对 GCC 中的地址清理程序的有意义的堆栈跟踪,但它对我不起作用。我的操作系统是 Ubuntu 14.04

以下是我采取的步骤:

  1. 我在 C 中使用了一个测试程序,这是一个典型的错误

    /li>
  2. 我安装 llvm 3.5apt-get

  3. 我导出以下变量

    /li>
  4. 我使用以下命令编译 gcc 4.8.2

    /li>
  5. 当我启动测试程序时,我在错误报告中收到了警告。似乎 AddressSanitizer 无法连接到 llvm-symbolizer-3.5

    /li>

而且我在堆栈跟踪上没有任何符号。如果我执行 sudo 我没有任何警告,但我也没有任何符号解析。

p>

我也尝试了谷歌页面项目中描述的python脚本asan_symbolize.py,但没有任何结果。

https://code.google.com/p/address-sanitizer/wiki/CallStack

0 投票
1 回答
1311 浏览

c++ - 在 OpenCV 中使用地址清理程序

我正在尝试将 Google 的Address Sanitizer与 CUDA 项目一起使用,更准确地说是与 OpenCV cuda 功能一起使用。但是,我在第一次 cuda 调用时遇到了“内存不足”错误。

它可以用

编译

我用 gcc 得到了同样的结果。我也尝试过将 cuda 函数列入黑名单,但没有结果。

现在使用没有opencv的cuda:

清理程序在内存泄漏时停止:

我的问题是如何使用地址清理程序来清理我的软件而不会陷入困境?我怎样才能至少正确地将所有与 cuda 相关的调用列入黑名单?

我在著名的网络搜索引擎上没有找到任何相关内容。就像人们不使用 cuda 或 asan 或两者兼而有之。伙计们只是有一个完全禁用 cuda 的构建吗?

我猜 asan 在 cuda 内存管理方面遇到了困难,但我正在寻找一种方法,至少在我的代码库的其余部分使用这个工具。