c技巧与知识点

  • 800 字
  1. 1. c技巧与知识点
    1. 1.1. Address Sanitizer

c技巧与知识点

包括但不限于语法、编译、测试、内存检查、链接等。

Address Sanitizer

AddressSanitizer (ASan)是一个性能非常好的 C/C++ 内存错误探测工具。它由编译器的插桩模块(目前,LLVM 通过)和替换了 malloc 函数的运行时库组成。这个工具可以探测如下这些类型的错误:

  • 对堆,栈和全局内存的访问越界(堆缓冲区溢出,栈缓冲区溢出,和全局缓冲区溢出)
  • UAP(Use-after-free,悬挂指针的解引用,或者说野指针)
  • Use-after-return(无效的栈上内存,运行时标记
  • ASAN_OPTIONS=detect_stack_use_after_return=1)
  • Use-After-Scope(作用域外访问,clang 标记 -fsanitize- address-use-after-scope )
  • 内存的重复释放
  • 初始化顺序的 bug
  • 内存泄漏

这个工具非常快。通常情况下,内存问题探测这类调试工具的引入,会导致原有应用程序运行性能的大幅下降,比如大名鼎鼎的 valgrind 据说会导致应用程序性能下降到正常情况的十几分之一,但引入 AddressSanitizer 只会减慢运行速度的一半。

使用 AddressSanitizer 可以在程序发生内存问题的时候及时检查出来,精准定位发生内存问题的位置,大大提高我们debug的效率。

以上来源于LINUX 下使用Address Sanitizer ,以及不能运行的问题, 该工具可用于c调试使用,在编译链接的时候添加-fsanitize=address参数进行使用,但是在配合vscode或者ide调试的时候,会报错Address Sanitizer无法运行,因为程序本身已经运行了占用了Address Sanitizer通道。一般忽略即可。

打赏
打赏提示信息
分享
分享提示信息