代码之家  ›  专栏  ›  技术社区  ›  zzxyz

fsanizize with gcc导致意外提前退出

  •  1
  • zzxyz  · 技术社区  · 6 年前

    我有个错误 这不是一贯的可复制性 哪里 free() 在无效堆指针上调用。将这个问题减少到“最小”是根本不可能的,因为有问题的代码--(一旦我做到了,问题就解决了)。我无法发现任何明显的问题(例如 calloc

    我相信 valgrind

    这给我留下了 fsanitize=address ,我相信?到目前为止我的经验是…不太好。

    我得到的是两个静态lib和一个与之链接的可执行文件。我已经打开了 fsanitize=地址 为了他们三个。与 -fsanitize=address 非常 彻底测试并纠正初始化例程(在256字节的中间 memcpy 进入一个16兆的堆分配——退出代码1)。

    有实际使用经验的人 fsanitize

    "command": "/usr/bin/c++   -I. -I/home/redacted -fpermissive -g -g3 -fasynchronous-unwind-tables -fsanitize=address   
    -std=gnu++11 -o core/CMakeFiles/nginx_core.dir/src/core/nginx.cpp.o -c /home/redacted.cpp",
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   zzxyz    6 年前

    我就把这个留给以后有问题的搜索者 fsanitize . tldr公司-- 成功了

    1. nginx …在我们定制的版本中,它被重定向到一个模糊的日志文件。不知道为什么 gdb __asan_report_error 将在退出前停止程序,以便您可以检查各种帧。

    2. 正如我提到的,虽然初始化例程是正确的,并且经过了大量测试,但它确实需要其客户机正确地分配一个(非常重要的)配置结构。在本例中,结构缺少1字节的完整性,导致1字节的超读。