php 고급

Xdebug Remote Debugging

Remote Debugging

리모트 디버깅이란 원격지의 서버를 로컬의 디버거를 이용해서 디버깅하는 것으로 한줄 한줄 실행하면서 로직의 흐름을 추적해 문제를 파악할 수 있도록 하는 것이다. 문제 파악 뿐 아니라, 코드 리뷰에도 큰 도움을 준다.

Remote Debugging의 메커니즘

Remote Debugging 설정

xdebug.ini 파일에 아래의 내용을 추가한다. 아래의 설정은 리모티 디버깅을 활성화 시키는 가장 기본적인 옵션이다. 

xdebug.remote_enable=1

리모트 디버깅을 위한 주요 설정은 아래와 같다. 자세한 내용은 메뉴얼을 참조한다. 

xdebug.remote_enabled

리모트 디버깅을 활성화한다. 이 값이 없거나 0이면 끄는 것이고, 1이면 켜는 것이다. 

xdebug.remote_autostart

xdebug를 켜기 위해서는 GET/POST의 값으로 XDEBUG_SESSION_START나 XDEBUG_SESSION cookie를 전달해야 한다. 하지만 remote_autostart를 1로 지정하면 xdebug.remote_enable의 값이 설정된 서버는 항상 xdebug remote debugging이 구동된다. 

xdebug.remote_host

xdebug의 리모트 디버깅이 시작 됐을 때 디버거가 위치하는 클라이언트의 IP를 지정한다. xdebug는 이 IP를 통해서 Xdebug 클라이언트와 통신하게 된다. 

xdebug.remote_connect_back

만약 여러사람이 한대의 서버에서 리모트 디버깅을 하거나, 클라이언트의 IP가 계속 변경되는 상황이라면 remote_connecst_back 옵션을 사용할 수 있다. 이 옵션은 자동으로 접속자의 IP로 디버깅이 수립된다. 이 옵션은 모든 클라이언트에 접속하기 때문에 불특정 다수가 접속하는 서버 환경에서는 절대로 사용하면 안된다. 보안 홀이 생긴다. 

Remote Debugging 클라이언트

xdebug 리모트 디버깅은 실제로 리모트 디버깅 클라이언트라는 카테고리의 에플리케이션들을 통해서 이루어진다. xdebug의 홈페이지에는 다양한 클라이언트가 소개되고 있는데 이것을 참조하자. http://xdebug.org/docs/remote#clients

리모트 디버깅은 이론적으로는 원격의 컴퓨터와 로컬의 컴퓨터가 서로 네트워크를 통해서 연결이 가능하다. 하지만 실제로 네트워크는 수 많은 문제 상황이 있을 수 있고, 다양한 설정이 존재하기 때문에 원격 머신에 대한 리모트 디버깅은 사실 쉽지 않다. 가급적 xdebug와 디버거를 한 컴퓨터 안에서 구동하는 것을 권장한다. 하위 수업에서는 필자가 검증한 리모트 디버거들에 대한 수업들이 준비되어 있다. 이 수업을 참조하자. 

댓글

댓글 본문
  1. 매리미
    무료 강의인데 말투가 험하네요. 공짜를 너무 당연하게 생각하는 거 아닙니까?
    대화보기
    • 김철기
      저도 같은 증상이었는데 답변 덕에 배웠습니다 감사합니다~
      대화보기
      • 이재윤
        본문내용에

        xdebug.remote_enabled이아니라

        xdebug.remote_enable 아닌가요? 흠
      • 둘리와주
        xdubug의 remote debugging설정시 계속 에러가 나서 실행이 안되던 중 발견한 것입니다.

        우분투 리눅스를 버츄얼박스에 설치하고 php.ini의 설정을 egoing님의 강좌대로 하였지만,
        리모트 디버깅은 실행안되었습니다.

        그러던 중 firefox의 부가기능 설정에서 설치한 easy xdebug 1.5의 설정을 보니
        remote_host=localhost;라고 되어 있는걸 보게 되었습니다.

        그래서, 우분투 리눅스의 php.ini설정에서
        'remote_host=127.0.0.1'이었던 것을
        'remote_host=localhost'라고 고치고 실행을 하니 리모트 디버깅이 동작하였습니다.

        혹시 리모트 디버깅이 안되시는 분들 계시면 저처럼 php.ini의 설정을 바꿔서 실행해 보세요.

        127.0.0.1이나 localhost가 같은 걸 의미한다고 알고있는데 저렇게 다르게 인식하는 경우도 있는것 같습니다.
      • 레니크래비츠
        질문을 여기다 올려도 되는지는 모르겠는데요

        현재 웹호스팅을 받고 있는데 xdebug 라이브러리가 설치되어 있지 않아서 그런데요

        현재 동영상 내용인 xdebug remote debugging을 해당 xdebug라이브러리가 설치 되어 있지 않으면

        사용할 수 없는건가요?
      • egoing
        알려주신 것을 확인했고 수정했습니다. 고맙습니다.
        대화보기
        • DJANGO
          remote 디버깅시 XDEBUG_SESSION을 주소창에 붙여서 해봤더니 안되더군요. 그래서 구글링과 XDEBUG Document를 참조로 XDEBUG_SESSION_START 이렇게 해야 디버깅이 실행되는데, 동영상 강의와 본문에는 잘못되어 있네요. 본문내용도 XDEBUG Document 사이트 내용 그대로를 갔다가 번역한듯 싶은데... 잘못된 내용 수정 해서 반영해 주세요. 저처럼 다른 사람도 삽질 하지 않도록...
        • 쌈닭
          :D
        버전 관리
        egoing@gmail.com
        현재 버전
        선택 버전
        graphittie 자세히 보기