<p>PHP 7.4에서 실행되는 PHP 코드 조각이 있습니다. <br /><br />일부에는 일련의 try-catch 블록과 개체 및 다양한 파일이 포함된 최상위 PHP 스크립트(/home/path/a.php)가 있습니다. 전화. <br /><br />이러한 try-catch 블록은 고객 오류 및 런타임 오류가 발생할 때 예외를 발생시킵니다. <br /><br />throw 문에는 오류 로그에 인쇄된 debug_backtrace()를 포함하여 오류 로그가 포함됩니다.
<pre class="brush:php;toolbar:false;">// 일부 코드
some/path/to/objects를 사용하십시오.
$database = 새 데이터베이스();
"some/file/reference.php"를 포함하십시오;
노력하다 {
// $_SESSION 데이터를 포함한 다양한 것들
if (비어 있음($_SESSION['b']) || 비어 있음($_POST['d'])) {
if(비어 있음($_SESSION['b'])) {
error_log("세션이 비어 있습니다. b가 없습니다.");
}
if(비어 있음($_POST['d'])) {
error_log("POST가 비어 있는 것으로 보입니다. d가 없습니다.");
}
throw new RuntimeException('잘못된 유효성 검사/양식 세부 정보가 제공되었습니다.');
}
}
catch (RuntimeException | 예외 $ex) {
error_log("로그인 페이지: ".$_SESSION['message']);
error_log("디버그: ".print_r(debug_backtrace(),true));
}</pre>
<p>그러나 이 코드는 올바르게 실행되고 오류를 수집하지만 오류 로그에는 다음 내용만 표시됩니다. </p>
<인용문>
<p>[2023년 7월 31일 18:42:17 유럽/런던] $_SESSION['message']</p><p>의 일부 맞춤 피드백 메시지
[2023년 7월 31일 18:42:17 유럽/런던] 배열</p><p>
(<br /> )</p>
</인용문>
<p>여기서 debug_backtrace()가 비어 있는 이유는 무엇입니까? 최소한 페이지에서 제공하는 매개변수와 변수, SESSION 데이터 또는 환경 데이터를 표시할 것으로 예상했습니다. <br /><br />저는 이 방법을 다른 곳에서 사용해 본 적이 있으며 (제가 기억하는 한) 잘 작동했습니다. 내가 뭐 놓친 거 없니?
으아아아debug_backtrace()
현재 위치를 추적하기 위해 호출 스택이 제공되지만 이미 가장 바깥쪽(예: 전역) 범위에 있고 호출을 하지 않았으므로 호출 스택을 사용할 수 없습니다.결과는 다음과 같습니다.
으아아아함수 안에 코드를 넣으면 다음 항목 하나가 포함된 호출 스택을 얻게 됩니다.
으아아아결과는 다음과 같습니다.
으아아아전역 범위에서 일부 (최소) 디버깅 정보를 얻으려면 모든 코드를 클로저로 감싸고 즉시 인라인으로 호출할 수 있습니다.
으아아아결과
으아아아세션/환경 데이터는 매개변수로 전달한 경우에만 표시됩니다.
으아아아결과:
으아아아이와 같은 세션/환경 변수를 기록하려면 가장 좋은 방법은 명시적으로 출력하는 것입니다.
으아아아