Skip to content

lucasrmagalhaes/xdebug-php

Repository files navigation

PHP Xdebug: ferramenta de debug e profiling


Rodar um teste específico

vendor/bin/phpunit --filter testBuscaLeiloesNaoFinalizados

Por que var_dump não parece uma forma profissional de depurar?
Porque, para cada ponto do código que quisermos analisar, precisamos editar o código fonte.
Se precisamos alterar o código fonte para analisar um ponto da aplicação, temos mais trabalho do que deveríamos. Além disso, existe sempre a possibilidade de esquecermos esse código de debug e enviar para produção.


xdebug
xdebug/wizard

Windows
Rodar o comando phpinfo() e color na text area do wizard;
Analisar as informações;
Fazer o download;
Renomear o arquivo para php_xdebug.dll
Mover o arquivo para php/ext/; e
Adicionar no final do php.ini a extensão zend_extension = xdebug.

Linux/MAC

pecl install xdebug

Como é possível uma extensão do PHP alterar uma função já existente?
A função não é alterada, já que a extensão (Xdebug) reescreve-a.
A função var_dump é redefinida pela extensão Xdebug. A "nova versão" traz mais informações do que a função original.


Exibir erros

display_errors = On

Forçar exibição dos erros

xdebug.force_display_errors = 1

Qual o nível de erro que o PHP deve exibir

error_reporting = E_ALL

Forçar exibição do nível de erros

xdebug.force_error_reporting = E_ALL

Parar/interromper a aplicação quando encontrar um erro

xdebug.halt_level = E_NOTICE

@ na frente de uma função ou código não exibe erros ou warning, serve para mascarar um erro.

Com essa opção mesmo utilizando @ o erro ou warning irá aparecer

xdebug.scream = 1

Onde, por padrão, são definidas as configurações para o PHP?
No arquivo php.ini
O caminho para este arquivo pode ser encontrado através do comando php -i, ou através da função phpinfo(). Neste arquivo, diversas configurações podem ser informadas para personalizar a execução do PHP e suas extensões.


xdebug/docs/display

var_dump em negrito e colorido

xdebug.cli_color = 2

Exibir menos propriedades, por exemplo dos filhos

xdebug.var_display_max_children = 1

Controlar a profundidade

xdebug.var_display_max_depth = 1

Limitando os caracteres da string

xdebug.var_display_max_data = 5

Como a stack trace pode ser útil?
Através da stack trace podemos reproduzir passo a passo o que aconteceu na aplicação.
Reproduzindo o passo a passo em nosso algoritmo, conseguimos ter uma noção melhor do que aconteceu na aplicação e assim encontrar com mais facilidade um possível erro ou comportamento inesperado.


xdebug/docs/stack_trace

Com a opção 3 mostra o valor na tela, 4 mostra variável e valor, recomendado a opção 2

xdebug.collect_params = 2

Que configuração do Xdebug permite analisar os parâmetros na stack trace?
xdebug.collect_params


Globals

ini_set('xdebug.dump.GET', '*');

xdebug.dump_globals = On
xdebug.show_local_vars = On

Profiling

xdebug.mode = profile
xdebug.output_dir = "C:\Users\Lucas\Desktop\xdebug-php\profiling\"

webgrind

Clonar o projeto;
Acessá-lo;
Rodar o comando:

composer serve

Selecionar o arquivo; e
Update.


Em que as informações de profiling podem ser úteis?
Ao analisar a performance do nosso sistema.
Com as informações de profiling, temos uma visão interessante sobre quanto tempo cada parte da nossa aplicação leva, podendo encontrar os maiores gargalos e decidir o que otimizar primeiro.


vendor/bin/phpunit --testsuite=unit

Debugger PHP no VS Code
Extensão PHP Debug


Qual a diferença entre os "botões" Step Into e Step Over?
Step over ignora a implementação da função sendo chamada na linha atual. Step into navega na implementação da função chamada na linha atual.
Ao debuggar uma linha, se selecionamos o Step into, a depuração entrará na função (ou método) que está sendo chamada naquela linha. Já o Step over ignora este detalhe de implementação e parte para a próxima linha do arquivo atual.


Quando a definição de um breakpoint condicional pode ser interessante?
Quando a linha for executada mais de uma vez, mas queremos parar em apenas determinados casos. Um loop, por exemplo.
Um loop é o melhor cenário para descrever a utilidade de um breakpoint condicional. Podemos fazer com que o breakpoint só seja "executado" em determinada iteração.


Em que momento pode ser útil utilizar a ferramenta Definir valor?
Quando queremos garantir que determinada alteração no código gera um resultado.
Se queremos garantir que um teste falha ao editar um valor, ou que a aplicação passa a funcionar com um valor de variável novo, esta funcionalidade pode ser muito útil para que não precisemos ficar alterando o código fonte a todo tempo.


Habilitado o Remote no servidor

xdebug.remote_enable = 1

xdebug Helper

Remote Debugging PHP in Visual Studio Code with XDebug