컴파일과 실행의 역할
컴파일 단계에서 프로그램을 바꾸어 실행 중의 문제를 확인할 검사를 넣는다. 소스 코드에 의심스러운 표현이 있는지만 보는 분석과는 작동 시점이 다르다.
검사하는 동작의 종류
일부 배열 범위 초과와 자료형에 맞지 않는 비트 이동, 정렬이 잘못된 포인터나 널 포인터의 사용 등을 다룬다. 부호 있는 정수 넘침도 대표적인 검사 대상이다.
검사 묶음의 범위
기본 undefined 묶음에 모든 검사가 들어가는 것은 아니다. 부호 없는 정수 넘침처럼 흔히 의도와 다를 수 있지만 정의되지 않은 동작은 아닌 경우도 별도 검사로 제공한다.
문제 발견 뒤의 처리
보고서를 출력하고 계속 실행하는 방식이나 중단하는 방식 등으로 동작을 정할 수 있다. 어떤 검사를 켰는지와 발견 뒤의 처리 방식에 따라 같은 프로그램의 검사 실행도 달라진다.
관련 문서
AddressSanitizer / libFuzzer / Csmith / 컴파일러 / 소프트웨어 테스트 / 프로그래밍