런타임 오류 탐지(Runtime error detection)는 소프트웨어 응용 프로그램이 실행되는 동안 이를 분석하여, 실행 과정 중에 발생하는 결함을 보고하는 소프트웨어 검증 방법이다. 이는 유닛 테스트(단위 테스트), 컴포넌트 테스트, 통합 테스트, 시스템 테스트(자동·스크립트 또는 수동), 또는 침투 테스트 과정에서 적용될 수 있다.
런타임 오류 탐지는 실행 시점에만 발생하는 결함(예: 파일 덮어쓰기와 같은 사례)을 식별하고, 응용 프로그램의 충돌, 느린 실행, 또는 예측 불가능한 동작의 근본 원인을 찾아내는 데 목적이 있다. 런타임 오류 탐지를 통해 일반적으로 탐지되는 결함에는 메모리 누수(memory leak), 널 포인터(null pointer) 역참조, 초기화되지 않은 메모리 읽기, 버퍼 오버플로(buffer overflow), 댕글링 포인터(dangling pointer) 사용, 경쟁 조건(race condition), 자원 누수 및 예외 처리 누락 등이 포함된다. 특히 C 및 C++와 같은 저수준 언어 환경에서 메모리 관련 오류를 자동으로 식별하는 데 널리 활용된다.
런타임 오류 탐지를 수행하는 도구는 일반적으로 응용 프로그램의 실행 코드에 계측(instrumentation)을 삽입하여 메모리 접근, 포인터 사용, 할당·해제 동작 등을 실시간으로 감시한다. 대표적인 상용 도구로는 Parasoft의 Insure++와 C++test가 있으며, 오픈소스 계열에서는 Valgrind와 같은 메모리 분석 도구가 유사한 목적으로 사용된다. 마이크로소프트(Microsoft)의 C/C++ 컴파일러 또한 /RTC(런타임 오류 검사) 옵션을 제공하여 특정 종류의 런타임 오류를 보고하도록 프로그램을 빌드할 수 있다.
런타임 오류 탐지의 한계로는, 도구가 응용 프로그램의 실제로 실행된 제어 흐름(control flow) 내에 존재하는 오류만 탐지할 수 있다는 점이 지적된다. 즉, 실행되지 않은 코드 경로에 존재하는 잠재적 결함은 런타임 오류 탐지로는 포착될 수 없다. 이 때문에 런타임 오류 탐지는 정적 분석(static analysis) 또는 기타 검증 기법과 함께 사용되는 경우가 많다.