Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP debug_backtrace() 함수 완벽 가이드: 호출 스택 추적 방법

PHP의 debug_backtrace() 함수는 역추적(backtrace)을 생성하는 디버깅용 내장 함수입니다. 이 함수는 현재 실행 중인 코드가 어떤 경로를 거쳐 호출되었는지 확인할 수 있도록 연관 배열(associative array) 형태로 호출 스택 정보를 반환합니다.

반환되는 배열에는 다음과 같은 요소들이 포함될 수 있습니다.

요소타입설명
functionstring현재 실행 중인 함수 이름
lineinteger현재 실행 중인 라인 번호
filestring현재 실행 중인 파일 이름
classstring현재 실행 중인 클래스 이름
objectobject현재 객체(Object) 정보
typestring현재 호출 유형을 나타냅니다. 메서드 호출일 경우 "->"가 반환되고, 정적(static) 메서드 호출일 경우 "::"가 반환됩니다. 일반 함수 호출일 경우 아무것도 반환되지 않습니다.
argsarray함수 내부에서 호출된 경우 해당 함수의 인수 목록을, include된 파일 내부에서 호출된 경우 포함된 파일 이름 목록을 담습니다.

문법(Syntax)

debug_backtrace(options, limit)

매개변수(Parameters)

  • options − 아래 옵션들을 조합한 비트마스크(bitmask) 값입니다.

    • DEBUG_BACKTRACE_PROVIDE_OBJECT: 반환 배열에 "object" 인덱스를 채울지 여부를 결정합니다.
    • DEBUG_BACKTRACE_IGNORE_ARGS: 메모리 절약을 위해 "args" 인덱스와 모든 함수/메서드 인수를 생략할지 여부를 결정합니다.
  • limit − 출력할 스택 프레임(stack frame)의 최대 개수를 제한합니다. 기본값은 0으로, 모든 프레임을 출력합니다.

반환값(Return)

debug_backtrace() 함수는 위 표에서 설명한 요소들을 포함하는 연관 배열을 반환합니다. 각 배열 항목은 호출 스택의 한 단계(프레임)에 해당하며, 가장 마지막에 호출된 함수부터 순서대로 나열됩니다.

사용 예제

다음은 debug_backtrace() 함수의 기본적인 사용 예제입니다.

<?php
    function display($str) {
        echo "Hi: $str";
        var_dump(debug_backtrace());
    }
    display('hello');
?>

실행 결과(Output)

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Hi: helloarray(1) {
    [0]=>
    array(4) {
        ["file"]=> string(36) "/var/www/tutorialspoint/php/test.php"
        ["line"]=> int(8)
        ["function"]=> string(8) "display"
        ["args"]=> array(1) {
            [0]=>
            &string(5) "hello"
        }
    }
}

활용 팁

debug_backtrace()는 에러 발생 지점 추적, 로그 기록 시 호출 경로 분석, 복잡한 코드 흐름 디버깅 등에 매우 유용합니다. 특히 대규모 프로젝트에서 특정 함수가 어디에서 호출되었는지 파악해야 할 때 강력한 도구로 활용할 수 있습니다. 다만 호출 스택 전체를 배열로 생성하기 때문에 성능에 영향을 줄 수 있으므로, 실제 운영 환경에서는 DEBUG_BACKTRACE_IGNORE_ARGS 옵션이나 limit 매개변수를 적절히 사용해 오버헤드를 줄이는 것이 좋습니다.