XDebug 3 이후 계속 이런 메시지가 나온다.
Xdebug: [Step Debug] Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port) :-(
디버깅과 관련 없는 부분인데도 자꾸 나와 성가시다. 이럴 때는 php 설정에 아래 사항을 하나 추가해 보자.
xdebug.log_level=0
XDebug 3 이후 계속 이런 메시지가 나온다.
Xdebug: [Step Debug] Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port) :-(
디버깅과 관련 없는 부분인데도 자꾸 나와 성가시다. 이럴 때는 php 설정에 아래 사항을 하나 추가해 보자.
xdebug.log_level=0
나는 주력으로 PhpStorm IDE를 꽤 오랫동안 사용해 오고 있다. IDE로서 매우 편리한 기능들이 많기 때문에 버릴 수가 없다.
하지만 요즘은 VSCode가 엄청나게 많은 개발자들의 지지를 얻고 있다. 무료로 사용 가능하고 많은 확장 기능들이 있어 그 나름대로 많이 편리한 것 같다. 가볍기도 하고.
나는 그동안 PhpStorm에서 최고로 유용한 기능으로 꼽았던 것이 PHP 원격 디버깅 기능이었다. 다만, 이건 PhpStorm에서만 가능한 사항은 아니고 IDE 별로 적절히 지원만 해 주면 가능한 기능이다.
앞으로 PhpStorm을 애용할 생각이지만, VSCode를 활용한 개발 환경은 대안으로 늘 만들어 두고 싶었다. 그 중 넘어야 할 산(?) 중 하나인 원격 디버깅 기능을 VSCode에서 셋업해 봤다.
Extensions 메뉴를 선택하고, ‘PHP Debug’를 입력해 확장을 설치한다.
그다음 디버깅을 하려는 소스 코드가 있는 디렉토리를 연다. 만약 워드프레스 테마나 플러그인을 작업하려면 워드프레스 루트 디렉토리를 여는 것을 더 권장한다.
VSCode의 설정을 저장하는 .vscode 디렉토리가 생성된다 (만약 없으면 만들면 된다). 이 디렉토리에 launch.json 파일을 생성한다 (마찬가지로 없으면 만들면 된다). 이 파일에 다음처럼 셋팅을 준비한다.
{
"version": "0.2.0",
"configurations": [
{
"name": "Remote Debugging",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/path/to/wp": "${workspaceFolder}/"
}
}
]
}
Code language: JSON / JSON with Comments (json)
/path/to/wp
부분은 현재 VSCode에서 열어둔 디렉토리 절대경로 설정한다.이렇게 하면 ‘Run and Debug’ 메뉴에서 ‘Remote Debugging’ 실행 항목이 생성된다. ‘Start Debugging’ 아이콘을 눌러 디버깅을 실행하면 된다.
xdebug 설정 부분은 대략 아래와 같다.
zend_extension=xdebug.so
xdebug.mode=develop,debug
xdebug.remote_enable=on
xdebug.start_with_request=trigger
xdebug.idekey=phpstorm-xdebug
start_with_requst=trigger
로 설정했으면 이 과정이 필요하다. 브라우저에 절절히 세션 쿠키를 넣을 방법이 필요하기 때문이다. 어지간한 브라우저마다 PHP 디버깅을 위한 확장 프로그램을 제공할 것이다. 나는 주로 파이어폭스와 XDebug Session Cookie를 사용한다. 설치한 다음 쿠키 값으로 phpstorm-xdebug를 설정한다.
워드프레스의 프론트 메인 파일인 index.php에 적당히 브레이크 포인트를 넣고 디버깅을 시작해 봤다. 아래처럼 PHP 처리가 중간에 멈추면서, 해당 과정 중의 콜스택, 변수 정보를 모두 속속들이 볼 수 있다. 여기에서 함수 안으로 들어갈지, 다음 코드 라인으로 진행할지 결정할 수 있다.
배열의 활용이 두드러진 PHP 코드는 런타임 때 대체 연관 배열 변수 값이 어떤 구조인지 알아보기 어려운 경우가 많다. 이 때 사용할 수 있는 가장 강력한 툴이 바로 XDebug를 활용한 원격 디버깅인 것 같다. 이렇게 XDebug의 원격 디버깅 기능을 활용하면 프로그램의 상황을 자세히 파악하면서 개발할 수가 있다. 보다 품질 좋은 코드를 작성하려면 반드시 필요하다.