명령 행 PHP 스크립트에 대해 XDebug 프로파일 러를 트리거하는 방법은 무엇입니까?


194

XDebug는 HTTP를 통해 스크립트를 호출 할 때 GET 또는 POST 매개 변수 "XDEBUG_PROFILE"을 전달하여 프로파일 링을 활성화 할 수있는 구성 지시문 "xdebug.profiler_enable_trigger"를 제공합니다. 이것은 모든 스크립트에 대한 프로파일 링을 원하지 않지만 PHP 구성을 항상 변경하지 않고 몇 가지 특별한 경우에만 유용합니다.

명령 행 PHP 프로그램에서 동일한 동작을 수행 할 수있는 방법이 있습니까? "XDEBUG_PROFILE"을 명령 줄 인수로 전달하려고 시도했지만 작동하지 않았습니다.

일반적으로 프로파일 링 커맨드 라인 PHP는 잘 작동하지만 브라우저 및 HTTP 서버와 동일한 호출 당 유연성을 원합니다.

어떤 제안?


미안, 나는 또한 이것을 시도하고 있지만 그것을 얻지 못한다. "XDEBUG_PROFILE"매개 변수에 무엇이 있어야합니까?
Andresch Serj

매개 변수가 존재하는 한 매개 변수의 내용은 중요하지 않습니다.
selfawaresoup

XDEBUG_PROFILE 환경 변수에 대한 지원 부족은 XDebug 버그 추적기의 버그 413입니다.
outis

답변:


257

-d플래그를 사용하여 INI 설정을 전달할 수 있습니다 php -d xdebug.profiler_enable=On script.php.


39
* nix 기반 시스템에서 다음과 같은 별명을 작성하여이를보다 쉽게 ​​사용할 수 있습니다 alias phpp="php -d xdebug.profiler_enable=1". 그런 식으로 프로필을 사용 php하고 싶지 않을 때 사용 하고 사용하는 경우 phpp.
JC Yamokoski

14
프로파일 러 출력을 저장하려는 디렉토리를 지정해야했기 때문에 이것이 나에게 도움이되었습니다 alias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=.". 항상 현재 작업 디렉토리에 디버그 출력을 저장합니다.
Lars Nyström

네, Win7 환경에서 Eclipse 및 XAMPP를 사용하고 있습니다. 효과가있다.
gouchaoer

4
Windows에서는 PATH 디렉토리에 phpp.cmd파일 php -d xdebug.profiler_enable=On %*을 만들 수 있습니다 phpp <args>.
Gras Double

43

우분투 / 넷빈즈 에서이 작업을 수행했습니다.

  • xdebug 설정 라인을 /etc/php5/apache2/php.ini 파일에서 /etc/php5/cli/php.ini로 복사
  • 디버그 세션 이름으로 환경 변수 설정 (디버깅을 시작할 때 시작되는 페이지 netbeans의 URL에있는 쿼리 문자열에서이를 얻을 수 있음) 명령은 다음과 같습니다. export XDEBUG_CONFIG = "idekey = netbeans-xdebug"

다음은 단순히 netbeans에서 디버깅을 시작하고 명령 행에서 "php myscript.php"를 수행하는 경우입니다.


2
참고 : 디버거를 듣고 유지하고 PHP 명령으로 트리거하지 않으려면 "unset XDEBUG_CONFIG"를 사용하면됩니다.
Dan LaManna

위의 답변이 ;-) 아닌 동안 이것은 실제로 나를 위해 일하고 있습니다.
Jonathan Liuti

4
이것은 디버깅 (스크립트를 통한 단계별)에 관한 것입니다. 문제는 프로파일 링 (스크립트 성능 분석, 함수 수행 시간 등)에 관한 것입니다.
Matthew Flaschen

32

원격 웹 서버에서 PhpStorm 으로이 명령을 사용합니다.

XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=server_name" php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` myscript.php

여기서 server_namePhpStorm 프로젝트 구성에서 서버 이름을 나타냅니다.


5
나는 이것을 .bash_aliases alias xphp="XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=example.com" php -d memory_limit=1G -d xdebug.remote_host=echo $ SSH_CLIENT | cut -d \ "= \"-f 2 | awk '{print $ 1}' "그래서 디버그하고 싶을 때 PHP 대신 xphp를 사용합니다
oliver nadj

18

Xdebug Remote Debugging 페이지 에 설명 된대로 XDEBUG_CONFIG"profile_enable = 1"지시문 을 포함시켜 환경 변수 를 통해 프로파일 링을 활성화 할 수도 있습니다 .

XDEBUG_CONFIG="profiler_enable=1" php ...

이 방법은 가장 접근하기 쉬운 방법이므로 허용되는 답변이어야합니다. PHP 바이너리는 랩핑 될 수 있으며, 터치하고 싶지 않은 곳에 인터프리터 #! / x / php로 설정 될 수 있습니다. env 변수를 사용하여 선택적으로 활성화 할 수 있습니다.
John

11

VM에서 개발하는 동안 Netbeans에서 작동하도록하는 비슷한 프로세스가 다릅니다.

원격 사용 가능 플래그, 자동 시작 플래그, ide 플래그 및 원격 호스트 이름을 전달해야합니다.

php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=netbeans-xdebug -dxdebug.remote_host=NAME.OF.HOST script.php

4

클라이언트 디버깅을 처리하기 위해 쉘 스크립트를 만들었습니다.

스크립트 이름 : phpdebug

#!/usr/bin/ksh
php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` $*

이 스크립트를 배치 /usr/bin하고 실행 권한을 부여했습니다.

이 스크립트는 phpdebug에 전달 된 인수를 가져 와서 xdebug 인수와 함께 php를 호출하고 쉘 스크립트에 전달 된 인수를 끝에 $ *를 추가합니다.


예, 어쨌든, 필요한 것은 원격 호스트에 대한 INI 설정을 추가하는 것입니다. PHP CLI 명령으로 IDE에서 디버깅하는 데 필요한 전부였습니다.
스펜서 윌리엄스

실제로 XDEBUG_CONFIG환경 변수도 설정해야했습니다 . 그와 xdebug.remote_host설정으로 작동했습니다.
스펜서 윌리엄스

2

PhpStorm 7에서 WAMP를 사용하면 이미 작동중인 xdebug 설정을 C : \ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.ini에서 C : \ wamp \ bin \ php \의 xdebug 섹션으로 복사하여 작동합니다. phpX.YZ \ php.ini. 그런 다음 스크립트를 다음과 같이 실행했습니다.

php -d xdebug.idekey=PHPSTORM script.php

이것은 라 라벨 장인 스크립트 디버깅에도 효과적이었습니다.

php -d xdebug.idekey=PHPSTORM artisan db:seed --force

0

Jetbrains의 문서

PHP 명령 행 스위치를 사용하여 디버깅으로 스크립트를 시작하려면 XDebug에 IDE에 연결하도록 지시하는 환경 변수를 설정하십시오.

윈도우 / 맥 OS / 리눅스

export XDEBUG_CONFIG="idekey=123"  

여기서 idekey는 임의의 값을 가져야합니다.

다음 명령 행 옵션으로 PHP를 시작하십시오.

php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 -dxdebug.remote_connect_back=0 path/to/script.php

Vagrant와 함께 127.0.0.1 대신 10.0.2.2를 사용할 수 있습니다 (관련 SO 질문 참조).

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