gpt4 book ai didi

c - 将自定义 assert() 与 AddressSanitizer 集成

转载 作者:行者123 更新时间:2023-12-03 16:31:46 29 4
gpt4 key购买 nike

我有一个自定义 assert() - 类似宏调用 abort()失败。使用 AddressSanitizer 时,我更喜欢在断言失败时打印通常的漂亮堆栈跟踪。如何做到这一点?

  • 是否可以在 abort() 时让 AddressSanitizer 打印诊断信息叫做?
  • 我可以调用 AddressSanitizer 函数来手动打印堆栈跟踪吗?
  • AddressSanitizer 是否提供了一个我可以使用的函数来代替 abort()这里?
  • 我对 Clang 和 GCC 的解决方案感兴趣。
  • 最佳答案

    您可以使用 __sanitizer_print_stack_trace来自 sanitizer/common_interface_defs.h :

    $ cat tmp.cc
    #include <sanitizer/common_interface_defs.h>

    int main() {
    __sanitizer_print_stack_trace();
    return 0;
    }

    $ g++ tmp.cc -fsanitize=address
    $ ./a.out
    #0 0x7fe00b381e58 in __sanitizer_print_stack_trace (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xece58)
    #1 0x55a059f7f802 in main (/home/yugr/a.out+0x802)
    #2 0x7fe00aec5b96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
    #3 0x55a059f7f719 in _start (/home/yugr/a.out+0x719)

    关于c - 将自定义 assert() 与 AddressSanitizer 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66184498/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com