PHP의 debug_backtrace() 함수는 역추적(backtrace)을 생성하는 디버깅용 내장 함수입니다. 이 함수는 현재 실행 중인 코드가 어떤 경로를 거쳐 호출되었는지 확인할 수 있도록 연관 배열(associative array) 형태로 호출 스택 정보를 반환합니다.
반환되는 배열에는 다음과 같은 요소들이 포함될 수 있습니다.
| 요소 | 타입 | 설명 |
|---|---|---|
| function | string | 현재 실행 중인 함수 이름 |
| line | integer | 현재 실행 중인 라인 번호 |
| file | string | 현재 실행 중인 파일 이름 |
| class | string | 현재 실행 중인 클래스 이름 |
| object | object | 현재 객체(Object) 정보 |
| type | string | 현재 호출 유형을 나타냅니다. 메서드 호출일 경우 "->"가 반환되고, 정적(static) 메서드 호출일 경우 "::"가 반환됩니다. 일반 함수 호출일 경우 아무것도 반환되지 않습니다. |
| args | array | 함수 내부에서 호출된 경우 해당 함수의 인수 목록을, 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 매개변수를 적절히 사용해 오버헤드를 줄이는 것이 좋습니다.