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

2024-01-12

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

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

    bash-3.2$ ASAN_SYMBOLIZER_PATH=/usr/local/Cellar/llvm34/3.4/lib/llvm-3.4/bin/llvm-symbolizer ./unit_test
    Start testing of PathTrieTest
    Config: Using QTest library 4.8.2, Qt 4.8.2
    PASS   : PathTrieTest::initTestCase()
    PASS   : PathTrieTest::pathTrieNodeTest()
    =================================================================
    ==76647==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x61600019e588 at pc 0x10891ddd3 bp 0x11312ba90 sp 0x11312ba58
    WRITE of size 48830 at 0x61600019e588 thread T3
        #0 0x10891ddd2 in wrap_readdir_r (/usr/local/lib/llvm-3.4/lib/clang/3.4/lib/darwin/libclang_rt.asan_osx_dynamic.dylib+0x11dd2)
        #1 0x10ac23571 in QFileSystemIterator::advance(QFileSystemEntry&, QFileSystemMetaData&) (/Volumes/ToolChain/qt-4.8/lib/QtCore.framework/Versions/4/QtCore+0xef571)
        #2 0x10abd86d3 in QDirIteratorPrivate::advance() (/Volumes/ToolChain/qt-4.8/lib/QtCore.framework/Versions/4/QtCore+0xa46d3)
        #3 0x10abd7a7f in QDirIteratorPrivate::QDirIteratorPrivate(QFileSystemEntry const&, QStringList const&, QFlags<QDir::Filter>, QFlags<QDirIterator::IteratorFlag>, bool) (/Volumes/ToolChain/qt-4.8/lib/QtCore.framework/Versions/4/QtCore+0xa3a7f)
        #4 0x10abd8b68 in QDirIterator::QDirIterator(QDir const&, QFlags<QDirIterator::IteratorFlag>) (/Volumes/ToolChain/qt-4.8/lib/QtCore.framework/Versions/4/QtCore+0xa4b68)
        #5 0x10abd7609 in QDirPrivate::initFileLists(QDir const&) const (/Volumes/ToolChain/qt-4.8/lib/QtCore.framework/Versions/4/QtCore+0xa3609)
        #6 0x10abd5394 in QDir::count() const (/Volumes/ToolChain/qt-4.8/lib/QtCore.framework/Versions/4/QtCore+0xa1394)
        #7 0x1084c205d in get_count(QFileInfo&) /Users/stebro/dev_vm/ui/ui/fsinfoprovider.cpp:36
    ...
    

    当应用程序未经清理运行时,此错误不会导致应用程序终止。

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

        Undefined symbols for architecture x86_64:
          "typeinfo for __cxxabiv1::__class_type_info", referenced from:
              __ubsan::checkDynamicType(void*, void*, unsigned long) in libclang_rt.ubsan_osx.a(ubsan_type_hash.o)
              isDerivedFromAtOffset(__cxxabiv1::__class_type_info const*, __cxxabiv1::__class_type_info const*, long) in libclang_rt.ubsan_osx.a(ubsan_type_hash.o)
              findBaseAtOffset(__cxxabiv1::__class_type_info const*, long) in libclang_rt.ubsan_osx.a(ubsan_type_hash.o)
        "typeinfo for __cxxabiv1::__si_class_type_info", referenced from:
              isDerivedFromAtOffset(__cxxabiv1::__class_type_info const*, __cxxabiv1::__class_type_info const*, long) in libclang_rt.ubsan_osx.a(ubsan_type_hash.o)
              findBaseAtOffset(__cxxabiv1::__class_type_info const*, long) in libclang_rt.ubsan_osx.a(ubsan_type_hash.o)
        "typeinfo for __cxxabiv1::__vmi_class_type_info", referenced from:
              isDerivedFromAtOffset(__cxxabiv1::__class_type_info const*, __cxxabiv1::__class_type_info const*, long) in libclang_rt.ubsan_osx.a(ubsan_type_hash.o)
              findBaseAtOffset(__cxxabiv1::__class_type_info const*, long) in libclang_rt.ubsan_osx.a(ubsan_type_hash.o)
    
  3. 我无法让黑名单工作,并且 -mllvm -asan-globals=0 或 -mllvm -asan-stack=0 似乎没有像我预期的那样工作。例如,后者不会抑制上面 #1 中列出的错误的生成,并且创建如下所示的黑名单也不会抑制错误:

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

    svn co http://llvm.org/svn/llvm-project/lldb/tags/RELEASE_34/final lldb
    

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


您可以使用以下方式构建您的项目-fsanitize=address -fsanitize-recover=address标志,并使用环境变量运行ASAN_OPTIONS=halt_on_error=0。 来源:https://github.com/google/sanitizers/wiki/AddressSanitizer https://github.com/google/sanitizers/wiki/AddressSanitizer

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 AddressSanitizer 在出现错误(和其他问题)后不会停止 的相关文章

随机推荐

  • 具有特殊字符的 CSS 类

    我有一个 Web 应用程序 需要使用 CSS 文件来操作某些元素 CSS 类包含方括号和其他特殊字符 至少chrome似乎不直接接受它们 div class 123 div 这门课有效吗 有没有办法使用类名 我想 profile redSt
  • 将前端和后端部署到 azure 上的同一 Web 服务

    我有一个 Web 应用程序 它有一个单独的 Node JS 后端和 Angular 前端 是否可以让它们都在同一个 Azure Web 服务上运行 或者我需要为每个服务提供独立的服务吗 我的nodejs服务器只是一个轻量级API 它为我的角
  • 如何同时执行多个Guzzle请求?

    我可以使用 Guzzle 执行单个请求 并且到目前为止我对 Guzzle 的性能非常满意 但是 我在 Guzzle API 中读到了有关 MultiCurl 和批处理的内容 有人可以向我解释如何同时发出多个请求吗 如果可能的话异步 我不知道
  • 基于类属性实现接口,无需反射

    这一页 http www postsharp net aspects code introductionPostSharp 网站上有以下预告片 您将遇到的常见情况之一是需要在大量类上实现特定接口 这可能是INotifyPropertyCha
  • 如何从正则表达式组中排除字符?

    我想从字符串 python 中删除除连字符之外的所有非字母数字字符 如何更改此正则表达式以匹配除连字符之外的任何非字母数字字符 re compile W Thanks 您可以只使用否定字符类来代替 re compile r a zA Z0
  • 为什么维度顺序会随着布尔索引而改变?

    当我们有M形状的 a b c 和一个索引数组v我们用它来索引最后一个数组 为什么M i v 结果是一个形状数组 d b with d中真实值的数量v 如下图所示 In 409 M zeros 100 20 40 In 410 val one
  • C# 中的 Rijndael 密钥大小

    我目前正在用 C 开发一个小工具 可以让我快速加密我的文件 所以我用了这个脚本 http www codeproject com Articles 26085 File Encryption and Decryption in C这看起来对
  • Doctrine 中的分离实体错误

    我正在将一组实体发布到控制器 我想删除所有这些实体 但是 下面的代码会抛出一个A detached entity was found during removed MyProject Bundle MyBundle Entity MyEnt
  • Gitlab+Jenkins 通过 webhook 显示此错误,我该如何解决此问题?

    Hook 执行成功但返回 HTTP 403 h2 HTTP ERROR 403 No valid crumb was included in the request h2 table tr th URI th td job pipeline
  • 创建继承自 IBlahblah 的所有类的集合

    使用反射 我猜 是否可以创建一个方法 该方法将返回从名为 IBlahblah 的接口继承的所有对象的集合 public interface IBlahblah 假设您有一个程序集 或程序集列表 要查看 您可以获得以下集合types它实现了一
  • package.json 中本地主机的代理

    我在地址中创建graphql服务器http localhost 4000 graphql我有服务器http localhost 3000 在 package json 输入中 proxy http localhost 4000 但我在这张图
  • C99 错误中函数“AudioServicesPlaySystemSoundWithVibration”的隐式声明无效

    所以 我主要用 swift 编写 但似乎调用这个 AudioServicesPlaySystemSoundWithVibration 的唯一方法是在 Objective c 中 一开始 我编写的代码确实有效 我不确定发生了什么变化 但它给了
  • 更改 Git 远程 URL 会更新提取,但不会更新推送

    我正在尝试更改 Git 中原始分支的远程 URL 我只想更改 SSH 端口 首先 列出我的远程起源给了我这个 git remote v origin email protected cdn cgi l email protection pa
  • 如何一次折叠所有 XAML 代码部分?

    经过短暂的接触后 我找到了答案CTRL M CTRL L这样做 但这仅适用于特定块 而不适用于所有代码部分 例如Ctrl m O在代码后面 Use CTRL M CTRL A 请参阅此处查看完整列表 http visualstudiosho
  • Material UI useMediaQuery hooks 渲染两次到 React Component,你有什么解决方案吗?

    我在项目中使用MUI 需要检查当前断点来为移动设备渲染div 但每次都是第一次渲染isMobile and 是桌面价值回报false但它在第二次渲染后设置了正确的值 它从 UI 方面工作得很好 但如果可能的话 我想避免第一次不必要的渲染 c
  • 将列中的类别扩展到 pandas 中的列名称

    我正在尝试扩展 不确定这个词是否正确 一些绝对的 使用 pandas 将数据放入列中 假设我有以下数据框 df pandas DataFrame name john john louis louis day a b a b oranges
  • 有没有列出所有移动设备和规格的信息数据库? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何开源项目或网站提供所有移动设备和规格的列表 也许这已经很旧了 但可能会对某人有所帮助 我正在
  • 如何使用 HTTP 重定向传递信息(在 Django 中)

    我有一个接受表单提交并更新模型的视图 更新模型后 我想重定向到另一个页面 并且我希望此页面上出现诸如 Field X successfully Updated 之类的消息 如何将此消息 传递 到其他页面 HttpResponseRedire
  • Node-sass 和 gulp-sass 的优缺点

    我想知道 node sass 和 gulp sass 之间有什么区别 每个版本的优点和缺点是什么 我在 www npmjs com 上看到 node sass 在下载方面有两倍以上的优势 这会让事情变得更好吗 编译速度有区别吗 他们之间的区
  • 如何使 AddressSanitizer 在出现错误(和其他问题)后不会停止

    我运行的是 OS X 10 8 5 我已经通过 homebrew 安装了 llvm 3 4 clang version 3 4 tags RELEASE 34 final 并且我正在使用 fsanitize address 进行构建 我可以