如何解决将自定义 assert() 与 AddressSanitizer 集成
我有一个类似 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。