我希望地址清理程序在捕獲某些內容時放棄。我認爲這是默認設計的,但它似乎不適合我。我也試過ASAN_OPTIONS=halt_on_error=1
這沒有效果。下面是詳細信息:gcc ASAN不會停止聲稱的運行時錯誤
在一個項目中,我的工作,我們使用的地址清潔劑,它散發出此警告/錯誤數週沒有人意識到這一點:
runtime error: null pointer passed as argument xx, which is declared to never be null
儘管它沒有被調用運行時錯誤停止該程序或導致退出代碼不良。下面是一個簡單的程序進行論證:
/*
gcc -fsanitize=address,undefined \
-Wformat \
-Werror=format-security \
-Werror=array-bounds \
-g -o xasan xasan.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
fprintf(stderr, "before\n");
memcpy(NULL, argc > 1 ? "" : NULL, argc > 1 ? 1 : 0);
fprintf(stderr, "after\n");
return 0;
}
的ARGC訣竅就是讓GCC不優化出的memcpy調用,基本上我們的代碼它結束了作爲memcpy(dst, NULL, 0)
這將導致運行時錯誤/警告。
我會期望'後'將不會在運行時錯誤後輸出,但它是和程序退出代碼是0.這是一個錯誤?手冊說它應該停止。