Xdebug는 PHP용 확장 기능으로,
'PHP' 개발 환경을 개선하기 위한 다양한 기능을 제공합니다.
***
**기능: Step Debugging**
스크립트가 실행되는 동안 IDE 또는 편집기에서 코드를 단계별로 살펴볼 수 있는 방법입니다.
Step Debugging 기능에서 IDE와 ***DBGp 프로토콜***로 통신 합니다.
** Info:**
DBGp 디버깅 프로토콜(Debugging Protocol)중 하나.
디버깅을 위한 표준 프로토콜
{: .notice--info}
---
**DBGp 통신 그림**
---
**php 구성정보 확인**
phpinfo() 함수를 실행시켜 현재 PHP 구성정보를 확인합니다.
```php
```
`
PHP 구성정보 화면이 나타나면, 전체 화면을 복사 합니다.
---
**Xdebug Wizard 사이트**
https://xdebug.org/wizard 사이트로 이동합니다.
복사한 phpinfo 정보를 양식에 붙여넣고, "Analyes my phpinfo() output" 버튼을 클릭하면
Xdebug 설치 방법을 알려줍니다.
해당 사이트에서 알려준 방법대로 진행 하면 Server에 xdebug를 설치할 수 있습니다.
+ xdebug-3.x.x.tgz 다운로드 (wizard 사이트에서 다운)
+ PHP Extension 컴파일 하기 위한 요구사항들을 설치
```
apt-get install php-dev autoconf automake
```
** 정보**
**php-dev** : PHP 개발에 필요한 다양한 라이브러리와 도구들을 제공
**autoconf** : 소프트웨어 빌드 시켜주는 스크립트를 자동 생성해주는 도구.
configure 라는 스크립트를 생성시켜 줍니다.
`
**automake** : 소프트웨어 빌드 프로세스를 자동화하기 위한 툴입니다.
소스코드를 컴파일 가능한 상태로 만들기 위해 Makefile 생성시켜 줍니다.
`
**Makefile** : 소스 코드 파일과 다른 자원들을 컴파일 가능한 상태로 만드는 방법을 정의합니다.
{: .notice--info}
+ 압축풀기
```
tar -xvzf xdebug-3.2.1.tgz
```
** 옵션의미**
**-x** : 아카이브 파일을 해제(decompress)합니다.
**-v** : 처리되는 파일들의 이름을 자세히(verbose) 출력합니다.
**-z** : gzip으로 압축된 아카이브 파일을 해제합니다.
**-f** : 파일 이름을 지정합니다. 이 옵션 다음에는 해제할 아카이브 파일의 이름이 나와야 합니다.
{: .notice--info}
** 정보**
**tar** : 여러 파일을 하나의 아카이브 파일로 묶는 프로그램
**gzip** : 압축을 수행하는 프로그램
**tgz** : tar로 묶은 파일을 gzip으로 압축한 형식
{: .notice--info}
+ 이동
```
cd xdebug-3.2.1
```
`
+ phpsize 실행
```
phpsize
```
** 정보**
**phpize** : configure, make, make install 등의 명령어를 실행하기 전에 필요한 파일들을 생성합니다.
{: .notice--info}
+ ./configure 실행
```
./configure
```
** 정보**
**configure** : 소스 코드를 컴파일하고 설치하기 위한 설정을 구성합니다.
{: .notice--info}
+ make 실행
```
./make
```
** 정보**
**make** : 소스 코드를 컴파일합니다.
{: .notice--info}
+ 라이브러리 복사
```
cp modules/xdebug.so /usr/lib/php/20210902
```
** 정보**
**cp** : 파일이나 디렉토리를 복사하는 명령어
cp [옵션] 소스파일 대상위치
{: .notice--info}
+ php.ini 파일 찾기
```
find / -name 'php.ini'
```
검색 결과 2개의 파일이 나옴
/etc/php/8.1/apache2/php.ini
/etc/php/8.1/cli/php.ini
+ 2개의 php.ini 파일에 code 추가
```ini
//For Xdebug v3.x.x:
[XDEBUG]
zend_extension = xdebug
xdebug.mode = debug
xdebug.start_with_request = yes
//For Xdebug v2.x.x:
[XDEBUG]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_port = 9000
```
저는 v3.2.1를 다운받았기 때문에, 위쪽 code만 추가 했습니다.
** 정보**
버전이 v2 => v3로 바뀌면서, 기본 포트도 9000 => 9003 으로 변경 됐습니다.
{: .notice--info}
** 정보**
**start_with_request** : 웹 서버가 클라이언트의 요청을 받을 때마다 Xdebug가 자동으로 활성화됩니다.
디버깅이 필요한 경우에만 디버깅을 할 수 있습니다. 이를 통해 디버깅을 위한 오버헤드를 줄일 수 있습니다.
{: .notice--info}
+ PHP 재시작 (서버 재시작)
```
sudo /etc/init.d/apache2 restart
```
** 정보**
**/etc 폴더** : etc(et cetera) 라틴어로 "그 밖에 더 많은 것" 의미
시스템 설정 파일들이 저장되는 폴더.
예를 들어 네트워크 설정, 사용자 계정, 서비스 설정 등이 포함됩니다.
`
**/etc/init.d 폴더** : 리눅스 시스템에서 서비스를 시작하고 중지하는 데 사용되는 스크립트 파일을 포함하는 곳.
이 디렉토리의 스크립트 파일은 시스템 부팅시 자동으로 실행된다.
수동으로 실행할 수도 있다.
{: .notice--info}
---
**Server Xdebug 적용 확인**
```php
```
이렇게 잘 나오면 Server 쪽 xdebug는 적용이 잘 된겁니다.
---
**Client Xdebug 설치**
---
**VSCode launch파일 생성**
port는 기본(9003)으로 설정했고,
pathMappings으로 server와 local의 파일경로를 매핑 시켰습니다.
---
**디버깅 동작 모습**
잘된다~ 오예~
Leave a comment