xdebug가 작동하는지 확인


86

texteditor 또는 IDE를 설치하지 않고 xdebug가 작동하는지 테스트 할 수 있습니까? 즉, PHP 코드를 디버그 할 수 있는지 여부를 테스트 할 수 있습니까?

phpinfo ()에서 xdebug가 나오는 유일한 부분은 다음과 같습니다.

추가 .ini 파일은 /etc/php5/apache2/conf.d/mysql.ini, /etc/php5/apache2/conf.d/mysqli.ini, /etc/php5/apache2/conf.d/pdo.ini, /etc/php5/apache2/conf.d/pdo_mysql.ini, /etc/php5/apache2/conf.d/xdebug.ini

다른 곳에서는 phpinfo ()에 언급되어 있지 않습니다.


7
phpinfo()로드 된 확장으로보고 합니까 ? 그게 "일"이란 뜻입니까?
Wiseguy

2
phpinfo ()에 표시되면 Xdebugs 포트 (기본적으로 9000)에서 텔넷을 시도 할 수 있습니다.
tix3

@Wiseguy, 질문을 업데이트했습니다. 제대로로드 / 작동하고 있다는 의미입니까?
oshirowanen

@ tix3, 질문을 업데이트했습니다. 제대로로드 / 작동하고 있다는 의미입니까?
oshirowanen 2012

2
확장이 실제로로드되면 구성 지시문을 나열하는 자체 섹션이 있어야합니다.
Wiseguy dec.

답변:


94

실제로 디버깅을하지 않고 는 디버거가 작동하는지 확신 할 수 없습니다 .

하지만 확신 할 수 있습니다. xDebug의 일부 측면이 작동하면 모두 작동 할 것이라고 가정해야합니다.

따라서 다음을 시도하여 xDebug가 설치되고 제자리에 있는지 확인할 수 있습니다.

1) phpinfo()-xDebug를 포함하여로드 된 모든 확장이 표시됩니다. 그것이 있다면 그것이 작동하고 있다는 것이 안전한 내기입니다.

2) 그것으로 충분하지 않다면, var_dump()기능을 사용해 볼 수 있습니다 . xDebug는 var_dump()추가 정보를 포함하도록 의 출력을 수정합니다 . 이것이 제자리에 있으면 xDebug가 작동하는 것입니다.

3) xDebug는 PHP의 오류 출력을 수정합니다. 프로그램이 xDebug와 충돌하면 표준 PHP 충돌 출력보다 실패에 대한 더 많은 정보를 얻을 수 있습니다.

4) xDebug는 또한 PHP에 많은 도우미 함수를 추가합니다. 작동하는지 확인하기 위해 이들 중 하나를 시도 할 수 있습니다. 예를 들어, 함수 xdebug_get_code_coverage()가 존재하고 배열을 반환해야합니다. 그렇다면 xDebug가 설치됩니다. 그렇지 않다면 그렇지 않습니다.


1
phpinfo ()는 Additional .ini files parsed. 지금 나머지 제안을 확인합니다.
oshirowanen

3
그냥 시도 xdebug_get_code_coverage()하고 나는 얻는다 Fatal error: Call to undefined function xdebug_get_code_coverage() in /var/www/xdebug.php on line 5.
oshirowanen 2012

7
그럴 수 있지. 이는 xdebug가 올바르게 설치되지 않았 음을 상당히 결정적으로 알려줍니다.
Spudley

3
이 경우에 FYI를 사용하면 /etc/php/conf.d/xdebug.ini파싱 ​​된 추가 .ini 파일에 언급 된 파일을 열고 모든 줄의 주석 처리를 제거해야합니다. zend_extension=xdebug.so xdebug.remote_enable=on xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_handler=dbgp
Tony Morello

@TonyMorello 내 php.ini가 전체 경로로 올바르게 설정 되었기 때문에 도움이되었다고 생각하지만 데비안에는 /mods-available디렉토리도 있고 xdebug.ini 설정이 내 php.ini 설정과 충돌했습니다.
PJ Brunet

67

운영

php -m -c

터미널에서 [Zend Modules]. 로드되면 어딘가에있을 것입니다!

NB

당신이 우분투를 사용하는 경우에서 Xdebug는 설정을 추가해야하기 때문에, 여기에 표시하지 않을 수 있습니다 /etc/php5/apache2/php.ini/etc/php5/cli/php.ini. 내 것은

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000

17
php --versionXdebug는와 또한리스트의로드 된 경우
mfink

1
@mfink php --version는 나를 위해 작동하지 않습니다. 내 컴퓨터를 시작한 직후 Apache가 시작되고 작동하면 php --versionXdebug phpinfo()가 표시 되지만 xdebug 섹션은 표시되지 않습니다. 그리고 PHP 스크립트 실행은 중단 점에서 멈추지 않습니다. 내가 실행 한 후 service apache2 restart, phpinfo()Xdebug는 섹션과 디버깅 작업을 보여줍니다. 따라서 어떤 이유로 컴퓨터 부팅 중에 Apache가 시작될 때 xdebug가로드되지 않습니다. 따라서 지금은 부팅 할 때마다 Apache를 다시 시작해야합니다.
Buttle Butkus

37

다음과 같이 시도하면 "존재"또는 "존재하지 않음"이 반환됩니다.

<?php
echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';

25

Netbeans 8.0.2에서 작동하도록 xdebug를 만들기 위해 거의 24 시간 동안 쓴 노력 끝에 모든 Ubuntu 및 Ubuntu 관련 스택에서 작동하는 솔루션을 찾았습니다.

문제 번호 1 : PHP 및 xdebug 버전이 호환되어야 함

때로는 Linux 설정을 실행하고 xdebug를 설치하기 위해 apt-get을 실행하면 적절한 xdebug 버전이 제공되지 않습니다. 제 경우에는 최신 PHP 버전이 있지만 오래된 xdebug 버전이 있습니다. 내 현재 Xubuntu 버전 때문인 것 같습니다. 소프트웨어 버전은 실행중인 OS 버전에 따라 달라지는 리포지토리에 따라 다릅니다.

솔루션 : PHP에는 PECL이라는 깔끔한 확장 관리자가 있습니다. 여기 에 제공된 지침에 따라 실행하십시오. 먼저 댓글에서 회원이 지적한대로 PECL이 작동하려면 PHP의 개발자 패키지를 설치해야합니다.

sudo apt-get install php5-dev

그런 다음 PECL을 사용하여 최신 안정 버전의 xdebug를 설치할 수 있습니다.

sudo pecl install php5-xdebug

일단 실행하면 적절한 버전의 xdebug가 설치되지만 사용할 준비가되지는 않습니다. 그 후에 활성화해야합니다. 이를 수행하는 방법에 대한 많은 제안을 보았지만 문제는 PHP가 클라이언트와 서버 (이 경우 Apache) 모두에서 활성화 할 일부 모듈이 필요하다는 것입니다. 여기서 가장 좋은 방법은 php5enmod라는 모듈을 활성화하는 내장 된 방법을 사용하는 것 같습니다. 사용법은 여기 에 설명되어 있습니다 .

문제 번호 2 : 모듈을 올바르게 활성화

먼저 / etc / php5 폴더로 이동해야합니다. 거기에는 apache2, cli 및 mods_available 3 개의 폴더가 있습니다. mods_available 폴더에는 주어진 모듈을 활성화하기위한 지침이있는 텍스트 파일이 있습니다. 이름 규칙은 [module] .ini입니다. 몇 가지 내부를 살펴보고 어떻게 설정되어 있는지 확인하십시오.

이제 mods_available 폴더 안에 ini 파일을 만들어야합니다. xdebug.ini라는 파일을 만들고 파일 안에 다음을 붙여 넣습니다.

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000

위의 예와 똑같은 지시어 [xdebug] 가 있는지 확인하십시오 . 모듈이 작동하려면 필수적입니다. 사실, 전체 코드를 복사하여 붙여 넣으면 더 행복한 사람이 될 것입니다. :디

참고 : zend_extension 경로는 매우 중요합니다. 이 예제에서는 현재 버전의 PHP 엔진을 가리 키지 만 먼저 / usr / lib / php5로 이동하여 숫자로 이름이 지정된 폴더가 올바른지 확인해야합니다. 거기에 보이는 이름으로 이름을 조정하고 폴더 내부를 확인하여 xdebug.so가 실제로 있는지 확인하십시오. 당신이 모든 것을 제대로했다면 그래야만합니다.

이제 xdebug.ini가 생성되었으므로 모듈을 활성화 할 차례입니다. 이를 수행하려면 콘솔을 열고 다음을 입력하십시오.

php5enmod xdebug

모든 것이 올바르게 진행되면 PHP는이 파일에 대한 두 개의 링크를 생성했습니다. 하나는 /etc/php5/apache2/conf.d 내부에 있고 다른 하나는 /etc/php5/cli/conf.d 내부에 있습니다.

Apache 서버를 다시 시작하고 콘솔에 다음을 입력하십시오.

php -v

다음과 같은 결과를 얻을 수 있습니다.

PHP 5.5.9-1ubuntu4.6 (cli) (built: Feb 13 2015 19:17:11) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.3.1, Copyright (c) 2002-2015, by Derick Rethans

즉, PHP 클라이언트가 xdebug.ini 파일을 읽고 xdebug.so 모듈을로드했습니다. 여태까지는 그런대로 잘됐다.

이제 웹 서버 어딘가에 phpinfo 스크립트를 만들고 실행합니다. 모든 것이 제대로 된 경우 다음을 확인해야합니다.

여기에 이미지 설명 입력

이것이 보이면 아파치도 모듈을로드했고 아마 갈 준비가 된 것입니다. 이제 Netbeans가 올바르게 디버그되는지 살펴 보겠습니다. 매우 간단한 스크립트를 만들고, 변수를 추가하고, 값을 부여하고, 중단 점을 설정합니다. 이제 CTRL + F5를 누르고 디버거 패널에서 "step in"을 클릭하고 다음과 같은 결과가 나오는지 확인합니다.

xdebug 작동

tools / options / php에서 디버깅을 위해 Netbeans 구성을 확인하는 것을 잊지 마십시오. 다음과 같이 보일 것입니다.

Netbeans에서 구성 디버깅

나는 이것이 다소 모호하고 혼란스러운 문제에 대한 빛을 비추 길 바랍니다.

최고의 소원!


2
나를 위해 일한,이 대답은 아마도 Xdebug는 나 넷빈즈 사이트에 있어야합니다
Southerton이

1
PECL이 작동하려면 PHP의 개발자 패키지를 설치해야 sudo apt-get install php5-dev했습니다..
2015

또한 php5enmodini 파일에 링크를 생성하지 않고 깔끔하게 작동합니다.
2015

1
한 가지 더 : [xdebug]ini 파일 의 지시문이 작동하도록하는 데 중요합니다. 원래 ini 파일에이 ( [xdebug]가) 누락 되어 있다는 사실에 혼란 스러웠지만 나에게는이 파일 없이는 작동하지 않았습니다.
2015

여보세요! PHP 개발자 패키지를 설치하는 것이 맞습니다. 그에 따라 게시물을 업데이트하겠습니다. php5enmod에 대한 귀하의 의견이 확실하지 않습니다. 내가 지정한 폴더에 링크를 생성합니다. 그리고 예, [xdebug] 지시문은 필수입니다.이를 반영하도록 게시물을 업데이트하겠습니다. 피드백 주셔서 감사합니다!
Théo T. Carranza 2015

10

KsaR 의 답변 을 확장 하고 명령 줄에서 xdebug를 확인할 수있는 가능성을 제공하기 위해 :

php -r "echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';"

6

이 작은 php코드를 실행할 수 있습니다

<?php
phpinfo();
?>

전체 출력 페이지를 복사하여이 링크에 붙여 넣습니다 . 그런 다음 분석하십시오. Xdebug가 설치되었는지 여부가 표시됩니다. 그리고 설치를 완료하기위한 지침을 제공합니다.


3

Eclipse 를 사용하는 경우 XDebug 모드에서 실행하는 동안 매직 상수 __FILE__은 항상 다음과 같이 평가됩니다.

xdebug://debug-eval

따라서 세션이 XDebug 아래에 있으면 다음 검사가 true 를 반환 합니다 .

$is_xdebug = false !== strpos(__FILE__,'xdebug'); // true while on XDebug

2

귀하의 질문에서 귀하의 phpinfo가 apache가 /etc/php5/apache2/conf.d/xdebug.ini에 xdebug의 구성을로드하고 있다고 언급했다고 언급했습니다. 온라인 지침의 많은 부분에서 php에 xdebug 구성을 넣어달라고 요청할 수 있습니다. .ini (그리고 내가 한 일입니다) 그러나 구성이 /etc/php5/apache2/conf.d/xdebug.ini로 설정되어 있으면 / etc / php5 / apache2에서 [XDebug] 구성 설정을 제거해야합니다. /php.ini 파일을 /etc/php5/apache2/conf.d/xdebug.ini INSTEAD에 넣습니다. /etc/php5/apache2/php.ini에서 제거하고 대신 /etc/php5/apache2/conf.d/xdebug.ini를 넣고 아파치를 다시 시작하면 작동했습니다!

따라서 /etc/php5/apache2/conf.d/xdebug.ini에 다음을 입력하십시오.

[XDebug]
zend_extension="/usr/lib/php5/20121212+lfs/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port="9000"
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/home/paul/tmp"

xdebug.remote_host="localhost"
xdebug.remote_handler="dbgp";
xdebug.idekey="phpstorm_xdebug"

그런 다음 /etc/php5/apache2/php.ini에서도 제거하십시오.

다음을 수행하십시오.

sudo 서비스 apache2 다시 시작

그럼 작동합니다 !!!


0

xdebug 3부터 다음 명령 줄을 사용할 수 있습니다.

php -r "xdebug_info();"

그리고 xdebug 설치에 대한 유용한 정보를 표시합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.