Sublime Text 에 xdebug 설치하고 원격 디버깅하기
sublime text 에디터에 xdebug 설치하고 원격 디버깅하는 방법.
사전 작업
Sublime text plugin 설치
- Ctrl-Shift-P Package Control: Install Package
- Xdebug client 설치
- 섭라임 재시작
PHP 서버 설정
- xdebug 모듈 설치(Windows RHEL/CentOS 리눅스에 xdebug 설치 참고)
xdebug 주요 설정
- remote_host : xdebug 가 구동되는 서버에 연결할 ip. IDE 를 사용하는 개발자 PC 의 ip 를 적어주면 된다.
- remote_port : 개발자 PC 에 xdebug client 가 떠 있는 포트. 기본 설정은 9000 이지만 이 포트를 사용하는 프로그램들이 가끔 있으므로 9001등 별도의 포트 권장
- idekey : PHP 서버의 xdebug 를 함부로 띄울수 없게 구동시 브라우저에 다음과 같은 파라미터를 구동해야 함. 이때 사용할 key로 아무 문자열이나 설정하면 됨
- XDEBUG_SESSION_START=idekey
- XDEBUG_SESSION_STOP=idekey
- remote_autostart : XDEBUG_SESSION_START 로 띄우지 않고 기본적으로 php 구동시 xdebug 를 자동 구동. 보안에 취약하므로 localhost 에서만 사용하고 원격 호스트는 사용하지 말 것.
디버깅 환경 구성
vagrant 에서 Homestead 사용
sudo vi /etc/php5/fpm/conf.d/20-xdebug.ini
zend_extension=xdebug.so xdebug.remote_enable = 1 xdebug.remote_connect_back = 1 xdebug.remote_host=10.0.2.2 xdebug.remote_port = 9001 xdebug.max_nesting_level = 250 xdebug.idekey=sublime.xdebug xdebug.remote_log="/var/log/xdebug/xdebug.log"
php5-fpm 재구동
sudo service php5-fpm restart
Local 웹 서버에서 사용
XAMPP, MAPP 등 APM 스택 사용시 설정
php.ini 에 다음 내용 추가
[xdebug] zend_extension = "D:\devel\php-5.6.8-Win32-VC11-x86\ext\php_xdebug-2.3.2-5.6-vc11.dll" ;zend_extension = /absolute/path/to/your/xdebug-extension.so xdebug.remote_enable = 1 xdebug.remote_autostart = 1 xdebug.remote_host = "127.0.0.1" xdebug.remote_port = 9001 xdebug.max_nesting_level = 250
localhost 에서 사용시 xdebug.remote_autostart =1 로 설정하지 않으면 xdebug 가 제대로 기동되지 않았음.
PHP 재시작 (웹 서버 또는 php-fpm)
sudo service httpd restart sudo service nginx restart sudo service php5-fpm restart
설정 확인
phpinfo() 를 출력하는 i.php 를 만들고 웹 브라우저로 연결하여 xdebug 설정 여부 확인
<?php phpinfo(); ?>
Sublime 설정
- Preferences -> Package Settings -> Xdebug -> Settings- User
Xdebug.sublime-settings 설정
vagrant 사용시{ "path_mapping": { "/home/vagrant/Code/Laravel" : "C:\\Users\\lesstif\\Code\\Laravel" }, "url": "http://homestead.app/", "ide_key": "sublime.xdebug", "port": 9001, "super_globals": true, "close_on_stop": true }
localhost 사용시
{ "path_mapping": { "C:\\Users\\lesstif\\Code\\Laravel" : "C:\\Users\\lesstif\\Code\\Laravel" }, "url": "http://localhost/", "port": 9001, "super_globals": true, "close_on_stop": true }
path_mapping: 원격 디버깅시 key(/home/vagrant/Code/Laravel)를 원격지 소스, value 를 로컬 소스 경로(C:\\Users\\lesstif\\Code\\Laravel를 지정. 두 개의 소스는 일치해야 함.
localhost 의 웹 서버에 구동할 경우 DocumentRoot 와도 일치해야 함.
url : xdebug 가 붙어 있는 원격 웹 서버 urlpath_mapping의 경로를 public 까지 잡으면 public 에 있는 파일만 디버깅 됨.
디버깅
섭라임에서 디버깅
- 서브라임 재구동
- Break point 를 설정할 소스를 열고 해당 라인에서 마우스 우클릭 Xdebug -> Add/Remove Breakpoint 설정
- Ctrl-Shift-P 를 누르고 xdebug 를 친 후에 메뉴에서 Start Debugging (Launch Browser) 선택
- 브레이크 포인트에 멈췄으면 디버깅 시작. Step Into 단축키는 Ctrl-Shift-F7
- 디버깅
명령행 php 에서 디버깅
laravel 의 artisan 등 명령행에서 php를 실행할 경우 -d 옵션으로 php.ini 에 있는 xdebug 설정을 넘겨주어야 한다.
다음 파일을 적당한 이름(ex: xdebug-artisan.bat) 로 저장한다.
@ECHO OFF php -d xdebug.profiler_enable=On -d xdebug.remote_enable=1 -d xdebug.remote_autostart=1 ^ -d xdebug.remote_host="127.0.0.1" -d xdebug.remote_port=9001 -d xdebug.max_nesting_level=250 ^ artisan %*
sublime 에서 artisan을 열고 브레이크 포인트를 건 후에 명령행에서 실행한다.
xdebug-artisan.bat route:list
Ref
- https://github.com/martomo/SublimeTextXdebug
- http://www.sitepoint.com/debugging-xdebug-sublime-text-3/
- http://markonphp.com/debugging-xdebug-sublime-text-3/