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.