찾다
백엔드 개발PHP 튜토리얼PHP 디버깅을 위한 강력한 도구: PHPDBG_php 기술

PHPDBG는 코드 수정이나 성능에 영향을 주지 않고 PHP 운영 환경을 제어할 수 있는 PHP SAPI 모듈입니다.

PHPDBG는 가볍고 강력하며 사용하기 쉬운 PHP 디버깅 플랫폼을 목표로 합니다. PHP5.4 이상에서 사용할 수 있습니다. php5.6 이상 버전에서는 내부적으로 통합됩니다.

주요 기능:

– 단일 단계 디버깅

– 유연한 중단점 방법(클래스 메서드, 함수, 파일: 라인, 메모리 주소, opcode)

– PHP의 eval을 직접 호출할 수 있습니다

– 현재 실행중인 코드를 볼 수 있습니다

– 사용자 공간 API(사용자 영역/사용자 공간)

– 간편한 통합

– 지정된 PHP 구성 파일 지원

– JIT 전역 변수

– readline 지원(선택 사항), 터미널 작동이 더욱 편리해졌습니다

– Java GUI를 사용한 원격 디버깅

– 간편한 작동(자세한 내용은 도움말 참조)

설치
phpdgb를 사용하려면 먼저 PHP 소스 코드 패키지를 다운로드해야 합니다. 그런 다음 phpdgb의 소스 코드 패키지를 다운로드하여 php 소스 코드 패키지의 sapi 디렉터리에 넣습니다. 마지막으로 설치 명령을 실행할 수 있습니다. 컴파일 및 설치 예시는 다음과 같습니다.

php의 소스 코드 패키지를 다운로드하여 /home/php 디렉토리에 저장했다고 가정합니다.

#cd /home/php/sapi
#git clone https://github.com/krakjoe/phpdbg
#cd ../
#./buildconf --force
#./config.nice
#make -j8
#make install-phpdbg

참고:

1. PHP 버전이 php5.6 이상인 경우 phpdbg가 php 코드 패키지에 통합되어 있으므로 별도로 다운로드할 필요가 없습니다.

2. 컴파일 매개변수에 –enable-phpdbg를 추가하는 것을 잊지 마세요.

3. 컴파일 시간 매개변수인 –with-readline을 선택적으로 추가할 수 있습니다. 추가하지 않으시면 phpdbg의 히스토리 및 기타 기능을 사용할 수 없습니다.

기본 사용법
1. 매개변수 소개
phpdbg는 명령줄에서 PHP를 디버깅할 수 있는 PHP의 sapi입니다. 일반적으로 사용되는 매개변수는 다음과 같습니다.

다음 스위치가 구현됩니다(cli SAPI와 마찬가지로).

-n php ini 무시

-c 경로에서 php ini 검색

-z zend 확장 로드

-d php ini 항목 정의

다음 스위치는 phpdbg의 기본 동작을 변경합니다.

-v는 조용함을 비활성화합니다

-s 스테핑 활성화

-e 실행 컨텍스트를 설정합니다

-b 지루함 – 콘솔에서 색상 사용을 비활성화합니다

-.phpdbginit(기본 초기화 파일)을 무시합니다

-i .phpgdbinit 위치를 재정의합니다(-I를 의미함)

-O oplog 출력 파일 설정

-q 시작 시 배너를 인쇄하지 않습니다

-r 바로 뛰어서 달려갑니다

-E eval()을 통해 단계 활성화

참고: -rr을 전달하면 실행 후 콘솔로 돌아가지 않고 phpdbg가 종료됩니다

2. 공통 기능
이전에 gdb 도구를 소개했습니다. 실제로 phpdbg와 gdb의 기능은 어떤 곳에서는 매우 유사합니다. 예를 들어 중단점 설정, 단계별 실행 등을 수행할 수 있습니다. 단지 디버깅 언어가 다를 뿐입니다. Gdb는 c 또는 c 언어 디버깅에 중점을 두는 반면, phpdbg는 PHP 언어 디버깅에 중점을 둡니다. 아래에서는 phpdbg의 몇 가지 일반적인 디버깅 기능을 소개합니다. 디버깅할 코드는 다음과 같습니다.

test_phpdbg_inc.php 파일의 소스코드는 다음과 같습니다.

<&#63;php 
function phpdbg_inc_func()
{   
  echo "phpdbg_inc_func \n"; 
} 
&#63;>

test_phpdgb.php 파일의 소스코드는 다음과 같습니다.

<&#63;php 
  include(dirname(__FILE__)."/test_phpdbg_inc.php"); 
  class demo{   
    public function __construct(){
       echo __METHOD__.":".__LINE__."\n";   
    }
    public function func($param){
       $param++;
       echo "method func $param\n";
    }
    public function __destruct(){
       echo __METHOD__.":".__LINE__."\n";
    }
  } 

 function func(){   
   $param = "ali";
   $param = $param + "baba";
   echo "function func $param\n";
 }

 $demo = new demo();
 $demo->func(1);
 func();
 phpdbg_inc_func();
&#63;>

3.phpdbg를 시작하세요

phpdbg가 성공적으로 설치되면 설치 디렉터리의 bin 디렉터리에 위치하게 됩니다. bin 디렉토리에 들어가서 phpdbg를 직접 입력해 보세요. 다음과 같습니다:

#phpdeg
[Welcome to phpdbg, the interactive PHP debugger, v0.4.0]
To get help using phpdbg type "help" and press enter
[Please report bugs to <http://github.com/krakjoe/phpdbg/issues>]
prompt>

디버깅할 PHP 스크립트를 로드하려면 exec 명령을 실행하면 됩니다. 다음과 같습니다:

#phpdbg
......
prompt> exec ./test_phpdbg.php

물론 phpdbg를 시작할 때 e 매개변수를 지정할 수도 있습니다. 다음과 같습니다:

#phpdbg -e ./test_phpdbg.php

4. 도움말 정보 보기

이전에 다른 디버깅 도구를 사용해 본 적이 있다면 phpdbg가 그 도구와 유사하다는 것을 알게 될 것입니다. 그러나 처음 사용할 때에도 도움말 정보를 얻어야 하는 경우가 많습니다. help 명령을 통해 도움말 정보를 얻을 수 있습니다.

......
prompt> help

phpdbg is a lightweight, powerful and easy to use debugging platform for PHP5.4+
It supports the following commands:

Information
 list   list PHP source
......

5. 중단점 설정

중단점을 설정하는 명령은 gdb와 동일합니다. 모두 break 이고 약어는 b 입니다. 그러나 특정 명령 매개변수는 여전히 다릅니다. gdb의 중단점 명령과 유사하게 "파일 이름: 줄 번호" 또는 줄 번호별로 중단점을 설정할 수 있습니다. 또한 phpdbg는 PHP와 관련된 중단점을 설정하는 몇 가지 방법도 제공합니다. 예를 들어, opline을 기반으로 중단점을 설정하고, opcode를 기반으로 중단점을 설정합니다.

우리 모두 알고 있듯이 PHP 코드는 결국 opcode로 구문 분석된 후 PHP 커널에 의해 하나씩 실행됩니다. PHP 문은 여러 opcode로 구문 분석될 수 있습니다. Opcode별로 중단점을 설정할 수 있으면 프로그램 실행 프로세스를 더 정확하게 추적할 수 있습니다. phapdbg를 사용하여 중단점을 설정하는 구체적인 예를 살펴보겠습니다.

오프라인별로 중단점 설정:

여기서 언급된 opline은 메소드 입구부터 시작하는 현재 코드의 줄 번호입니다. 예를 들어, test_phpdgb.php 파일에서 18행의 "$param = $param "baba";" 코드의 opline은 2입니다.

......
prompt> b func#2
prompt> r
demo::__construct:5
method func 2
[Breakpoint #0 resolved at func#2 (opline 0x7f5b230a2e38)]
[Breakpoint #0 resolved at func#2 (opline 0x7f5b230a2e38)]
[Breakpoint #0 resolved at func#2 (opline 0x7f5b230a2e38)]
[Breakpoint #0 in func()#2 at ./test_phpdbg.php:18, hits: 1]
>00018:   $param = $param + "baba";
 00019:   echo "function func $param\n";;
 00020: }
......

6. 중단점 보기

gdb와 마찬가지로 phpdbg도 info break 명령을 사용하여 중단점을 확인합니다. 예시는 다음과 같습니다.

....
prompt> info break
------------------------------------------------
File Breakpoints:
#1   /home/hailong.xhl/test_phpdbg.php:10
------------------------------------------------
Opline Breakpoints:
#0   7ff3219e1df0    (function breakpoint)
------------------------------------------------
Function opline Breakpoints:
#0   func opline 2
....

通过上面的显示,我们可以知道。info break的显示结果中会把断点的类型也给显示出来。#后面的数字是断点号。我们可以根据断点号删除断点。

7、删除断点

和gdb命令不一样。phpdbg的删除断点不是delete命令,而是break del 命令。示例如下:

......
prompt> break del 1
[Deleted breakpoint #1]
prompt>
......

break del 后面的数字1就是断点号。

8、查看代码

phpdbg查看代码的命令也是list。但是和gdb相比,使用的方式更多样一些。

显示指定函数的代码:

......
prompt> l f func
 00017:   $param = "ali";
 00018:   $param = $param + "baba";
 00019:   echo "function func $param\n";;
 00020: }
 00021:
prompt>
......

单步执行

phpdbg的单步执行只有一个命令 step。和gdb的step命令差不多。都是一行一行的执行代码。注意,phpdbg是没有next命令的。

....
prompt> s
[Breakpoint #0 resolved at func#2 (opline 0x152ba40)]
[L19      0x152ba70 ZEND_ADD_STRING     C2   @0  ./test_phpdbg.php]
>00019:   echo "function func $param\n";;
 00020: }
 00021:
....

继续执行

和gdb一样,phpdbg的继续执行命令也是continue,简写形式为c。

执行php代码

这个是phpdbg的一个特色。可以在调试的过程中使用ev命令执行任意的php代码。如:

......
prompt> ev $var = "val";
val
prompt> ev var_dump($var);
string(3) "val"
......

可以通过这种方式,在调试过程中动态的修改变量值,查看执行效果。

以上就是本文的全部内容,轻松玩转调试利器PHPDBG,希望大家喜欢。

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP 응용 프로그램을 더 빨리 만드는 방법PHP 응용 프로그램을 더 빨리 만드는 방법May 12, 2025 am 12:12 AM

TomakePhPapplicationSfaster, followthesesteps : 1) useopCodeCaching likeOpcachetOrpectipiledScriptBecode.2) MinimizedAtabaseQueriesByUsingQueryCachingandEfficientIndexing.3) leveragephp7 assistorBetterCodeeficiession.4) 구현 전략적 지시

PHP 성능 최적화 점검표 : 지금 속도를 향상시킵니다PHP 성능 최적화 점검표 : 지금 속도를 향상시킵니다May 12, 2025 am 12:07 AM

toImprovePhPapplicationSpeed, followthesesteps : 1) enableOpCodeCachingWithApcuTeCeScripteXecutionTime.2) 구현 구현

PHP 의존성 주입 : 코드 테스트 가능성을 향상시킵니다PHP 의존성 주입 : 코드 테스트 가능성을 향상시킵니다May 12, 2025 am 12:03 AM

의존성 주입 (DI)은 명시 적으로 전이적 종속성에 의해 PHP 코드의 테스트 가능성을 크게 향상시킵니다. 1) DI 디퍼 커플 링 클래스 및 특정 구현은 테스트 및 유지 보수를보다 유연하게 만듭니다. 2) 세 가지 유형 중에서, 생성자는 상태를 일관성있게 유지하기 위해 명시 적 표현 의존성을 주입합니다. 3) DI 컨테이너를 사용하여 복잡한 종속성을 관리하여 코드 품질 및 개발 효율성을 향상시킵니다.

PHP 성능 최적화 : 데이터베이스 쿼리 최적화PHP 성능 최적화 : 데이터베이스 쿼리 최적화May 12, 2025 am 12:02 AM

DatabaseQuesyOptimizationInphPinVolvesVesstoigiestoInsperferferferferformance.1) SelectOnlyNecessaryColumnstoredAtatatransfer.2) useinDexingTeSpeedUpdatarretieval.3) ubstractOrerEresultSoffRequeries.4) UtilizePreDstatements Offeffi

간단한 가이드 : PHP 스크립트와 함께 이메일 보내기간단한 가이드 : PHP 스크립트와 함께 이메일 보내기May 12, 2025 am 12:02 AM

phpisusedforendingemailsduetoitsbuitsbuitsbuit-inmail () functionandsupportivelibraries lifephpmailerandswiftmailer.1) usethemail () functionforbasicemails, butithaslimitations.2) EmployPhpmailerforAdvancedFeatirehtMailsAndAtachments.3))

PHP의 종속성 주입 : 간단한 설명PHP의 종속성 주입 : 간단한 설명May 10, 2025 am 12:08 AM

의존성 (di) inphpenhancescodeflexibility 및 testability는 theiredections 의존성에 대한 classessecouplassessecouplesseviaconstructors, useconstructorinjectionsforpostforpost-creationdencecanchanges, t

PHP DI 컨테이너 비교 : 어느 것을 선택해야합니까?PHP DI 컨테이너 비교 : 어느 것을 선택해야합니까?May 10, 2025 am 12:07 AM

간단한 프로젝트에는 Pimple이 권장되며 Symfony의 종속성은 복잡한 프로젝트에 권장됩니다. 1) Pimple은 단순성과 유연성으로 인해 소규모 프로젝트에 적합합니다. 2) Symfony의 종속성 주입은 강력한 기능으로 인해 대규모 프로젝트에 적합합니다. 선택할 때 프로젝트 규모, 성능 요구 사항 및 학습 곡선을 고려해야합니다.

PHP 의존성 주입 : 무엇, 왜, 어떻게?PHP 의존성 주입 : 무엇, 왜, 어떻게?May 10, 2025 am 12:06 AM

의존성 (di) inphpisadesignpatternwhereclassdectionsearepassedtoittratherthathertancreatedincreatedincreatedincreatedincreatedincreatedincreatedincecreatedincecreatedince.itimprovessoftwarequalityby : 1) 향상된 testability througheasydectionmocking, 2) lextibility oca

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경