PhpStorm을 사용한 디버그

견고한 기초를 마련하여 PhpStorm 디버그의 섬세한 세계에 깊이 들어가 보세요. 이 에피소드에서는 Xdebug를 사용하여 디버그 세션을 시작하고, 중단점을 설정하며, 코드의 스텝오버 또는 스텝인투를 실행하는 방법을 알아봅니다.

강의 텍스트

PhpStorm의 가장 강력한 기능 중 하나는 디버거입니다. '디버거'라는 이름의 유래는 1940년대로 거슬러 올라가는데, 말 그대로 '프로그램에서 버그나 오류를 제거하는 도구'를 의미합니다. 디버거를 사용하면 코드를 실행하면서 일시 중지하여 프로그램 메모리를 검사하고 코드가 실행되는 경로를 추적하는 등 다양한 작업을 수행할 수 있습니다. 디버거의 목적은 문제가 있는 부분을 쉽게 찾아내고 코드에서 버그를 제거하는 것입니다.

PhpStorm에는 간단한 디버거가 기본적으로 제공되지만, 가장 인기 있는 PHP용 디버거는 단연 Xdebug입니다. 이 디버거는 별도로 설치해야 하지만 다행히 PhpStorm에서 자동으로 설치해 줍니다. 그러면 PhpStorm에서 Xdebug를 설정하는 방법과 디버그를 시작하는 방법을 살펴보겠습니다.

Xdebug가 설치되어 있지 않다고 가정해 보겠습니다. PHP 스크립트 디버그, 예를 들어 테스트를 시작하면 무슨 일이 일어날까요? 일반적으로 테스트를 실행해도 되지만, 그 대신 Debug(디버그) 버튼을 누를 수도 있습니다. 보시다시피 PhpStorm은 디버거가 설치되어 있지 않음을 알려줍니다. 이 문제를 PhpStorm 대신 해결해 줄 수도 있습니다. Update Interpreter Info(인터프리터 정보 업데이트), Download and install Xdebug extension(Xdebug 확장 프로그램 다운로드 및 설치)을 차례로 누르고 IDE에서 Xdebug를 설치하는 동안 잠시 기다리세요.

설치가 끝나면 PhpStorm이 디버거를 활성화하여 테스트를 자동으로 다시 실행하지만 별다른 일은 일어나지 않습니다. 아직 디버거에게 어느 지점에서 일시 중지하라는 지시를 내리지 않았기 때문입니다. 이를 지시하려면 '중단점'이라는 것을 사용해야 합니다.

중단점은 디버거가 잠시 실행을 중지할 코드 위치로, 이를 이용해 사용자는 실행 결과를 검사할 수 있습니다.

예를 들어, 여기 이 줄에 중단점을 추가해 보겠습니다. 여백의 줄 번호를 클릭하면 끝납니다. 이제 테스트를 다시 실행해 보겠습니다.

이번에는 달라진 것이 보일 겁니다. 프로그램이 일시 중지되고 PhpStorm에 여러 가지 정보가 표시됩니다.

왼쪽에서 이 중단점에 도달하기까지 발생한 모든 상황을 볼 수 있습니다. 현 지점까지 오는 데 이러한 메서드 호출을 거쳐왔습니다. 이러한 호출을 하면 PhpStorm에서 해당 파일의 경로를 보여줍니다.

오른쪽에는 현재 중단점에서 사용할 수 있는 모든 변수가 표시됩니다. 테스트 클래스를 참조하는 $this 변수가 있고, 이를 열면 그 내용을 확인할 수 있습니다. 예를 들어, 전역 $_ENV 변수와 같은 다른 변수가 있습니다. PhpStorm은 해당 내용을 보여주고, 사용자는 이전 메서드 호출 중 하나로 이동할 때마다 변수 목록이 어떻게 변하는지 볼 수 있습니다.

디버거가 이제 프로그램 흐름에서 역방향으로 이동하므로, 어떤 상황이 발생했을 때 그 이전에 어떤 일이 있었는지 알아야 하는 경우 매우 유용합니다. 앞으로 돌리려면 어떻게 해야 할까요?

Resume(다시 시작) 버튼을 눌러 디버거의 일시 중지를 해제할 수 있지만 그러면 테스트가 종료됩니다.

중단점으로 돌아가서 Resume(다시 시작)을 누르는 대신 Step over(스텝오버) 또는 Step into(스텝인투) 버튼을 눌러보겠습니다. 이 두 가지 기능은 매우 강력합니다.

'스텝오버'는 디버거가 다음 구문으로 이동하여 다시 일시 중지됨을 의미합니다. '스텝인투'는 디버거가 한 단계 더 깊이 들어가 함수 호출에서 무슨 일이 일어나는지 디버그한다는 것을 의미합니다.

이 두 버튼을 결합하면 매우 강력해집니다. 기본적으로 프로그램의 흐름을 탐색하면서 변수가 변화되는 과정, 조건이 일치하거나 일치하지 않는 이유, 루프가 발생하는 빈도 등을 살펴볼 수 있습니다.

하지만 디버그는 강력하기는 해도 다루기가 두렵기도 합니다. 상황이 너무 다양하기 때문에 마땅한 컨텍스트 없이 예시를 들기는 어렵군요. 디버그에 익숙해지려면 악기 연주처럼 연습이 필요합니다.

그러면 무엇을 해야 하는지 제시해 드리죠. 지금까지 디버그 세션을 시작하는 방법, 중단점, 그리고 코드 스텝오버 및 스텝인투 등 디버거를 시작하기 위한 기초적인 내용을 보여 드렸습니다. 이러한 내용에 익숙해져야 하며 이를 위한 유일한 방법은 연습뿐입니다. 다음 번에 var_dump 또는 dd 문을 작성할 때는 대신 디버거를 사용해 보세요. 처음에는 껄끄럽겠지만 시간이 지나면서 쉬워지고 나중에는 그 이점을 누릴 수 있을 겁니다.