Depuração de PHP - Como depurar seu código PHP (técnicas de depuração Drupal incluídas!)
Publicados: 2019-09-03A depuração não é algo que nós, desenvolvedores, ansiamos. Os desenvolvedores detestam bugs, mas para construir um software de boa qualidade, a depuração é uma parte indispensável da vida do desenvolvedor. Cada desenvolvedor de PHP tem um estilo diferente e métodos úteis para depurar seu código. Isso depende da experiência deles, da abordagem de resolução de problemas e, o mais importante, da quantidade de tempo disponível!
Quão importante é a depuração e por que você precisa depurar seu código?
A depuração é parte integrante de um ciclo de vida de desenvolvimento de software que garante resultados de qualidade.
Imagine isso - O código-base é grande, você é novo no projeto, você não tem muitos detalhes do projeto / funcionalidade. Mas você deve consertar um bug. De onde começamos? Começamos analisando o código passo a passo para entender o que é feito e onde as coisas estão dando errado. Isso, meus amigos, é a depuração. A depuração é uma arte que pode ficar melhor com a prática e a experiência.
Como depurar seu código PHP
Ok, então aqui está um caso que encontrei em minha carreira de desenvolvimento. Existe um site de comércio baseado no Wordpress em que o processo de checkout demorava cerca de 5 a 8 minutos e fui solicitado a resolvê-lo. Nesse caso, não tenho muito conhecimento de como as coisas funcionam com o Wordpress. Portanto, comecei marcando as opções da lista, uma por uma, como: (a) É por causa de algum plugin? (b) Está relacionado ao tema? (c) É alguma base de código customizada? etc.
A ferramenta que me ajudou na depuração de php e resolver este caso é o Blackfire. Isso dá a você uma opção mais legível pelo usuário de rastreamento de pilha de todas as funções, o tempo gasto para cada função em todo o processo. Ao usar isso, descobri a função que está consumindo o processo de checkout. Tudo que você precisa é alguma configuração para adicionar a chave à sua base de código e você está pronto para analisar qualquer funcionalidade usando a documentação.
Portanto, você pode resolver os bugs se tiver conhecimento sobre vários métodos de depuração de php.
Técnicas de depuração de código
Deixe-me falar sobre algumas técnicas que usei para depurar PHP.
Uma forma simples e mais comum de verificar se a função ou o método que você escreveu está sendo chamado, escreva uma saída. Não haveria nenhum desenvolvedor que não tenha usado isso!
Para verificar o valor de alguma variável, print_r (), var_dump (), var_export (). Ok, vamos ver a diferença.
Exemplo:
Suponha uma matriz
$ a = array (1, array ("a", "b"));
print_r ($ a);
Variedade ( [ 0 ] => 1 [ 1 ] => Matriz ( [ 0 ] => 'a' [ 1 ] => 'b' ) ) |
Isso fornece um formato legível e informações sobre a variável. Além disso, podemos armazená-lo em uma variável com print_r ($ var, true).
var_dump ($ a);
array ( 3 ) { [ 0 ] => int ( 1 ) [ 1 ] => array ( 2 ) { [ 0 ] => string ( 1 ) "a" [ 1 ] => string ( 1 ) "b" } } |
Isso imprime junto com o tipo e o comprimento de cada valor. E isso é mais rápido comparativamente a print_r ()
var_export ($ a);
array ( 0 => 1 , 1 => array ( 0 => 'a' , 1 => 'b' , ), ) |
Isso imprime junto com o tipo e o comprimento de cada valor. E isso é mais rápido comparativamente a print_r ()
var_export ($ a);
Isso retorna um php válido, se a variável existe, caso contrário, retorna falso. O que significa que a saída de var_export pode ser usada diretamente em um arquivo php.
Você já fez uso do debug ($ var, NULL, TRUE) fornecido pelo núcleo Drupal? Isso usa print_r () ou var_export com base nos argumentos passados para a função de depuração do php.
E os avisos como abaixo, nos quais você não tem ideia de qual linha de código está causando esse aviso.
aviso: argumento inválido fornecido para foreach () em /modules/node/node.module na linha 485 .
Sabemos que existem tantos lugares onde o módulo de nó será chamado. Então, como você resolve isso? Uma maneira mais rápida sem usar nenhum outro recurso externo é usar a função debug_backtrace () do PHP. Vá para “drupal_set_message”, porque você sabe, este é o método que está imprimindo o aviso. Coloque a linha abaixo, nessa função
debug_backtrace ();
Saída:
Variedade ![]() argumento fornecido para foreach () em /modules/node/node.module na linha 504. |
Esta função mostra a pilha de todas as funções que são chamadas no processo de causar o aviso. Certifique-se de restringir o limite, caso contrário, o PHP mostra uma mensagem de “memória esgotada” se a pilha demorar muito para ser exibida.
Depuração por meio de CLI:
Ouvi falar do phpdbg ! Sim, existe uma extensão php que está disponível no PHP 5.6+ que é usada para depurar um arquivo php da linha de comando.
Abra seu terminal, digite “phpdbg”. Isso inicia um shell de depurador php interativo. Você também pode usar pontos de interrupção! Apenas experimente - a maneira oculta de depurar PHP.
O único problema é: você terá que se acostumar com os comandos do phpdbg para fazer um melhor uso dele.
Depuração por meio do Drupal:
Develop Kint: Os desenvolvedores do Drupal usam isso com bastante frequência. Kint é um submódulo do módulo Devel que pode ser usado para depurar modelos de ramificação do Drupal 8 junto com dump ();
DB Log: Quem não conhece este módulo Drupal ?! Em D7 é watchdog () e D8 é serviço logger.
\ Drupal :: logger ( 'my_module' ) -> debug ($ message);
Mas a única razão pela qual não encorajamos o uso deste módulo, embora estejamos apaixonados por ele, é que a mensagem de log é sempre gravada no banco de dados!
E imagine se for um banco de dados enorme, isso seria ainda pior e afetará o desempenho. Por isso, não é recomendável usar o módulo DBLOG em sites de produção.
Você ainda deseja usar DBLog, módulo e reduzir os impactos no desempenho? Também existe uma solução para isso - Filtro DBlog. Este é um módulo de contribuição que ajuda a restringir o tipo de logs a serem gravados no banco de dados. Por exemplo, se você deseja armazenar apenas logs de “erro” de gravidade, pode configurá-los com este módulo. Assim, você não precisa se livrar completamente do módulo Dblog . Sim, e este módulo é uma contribuição minha;)
Criador de perfil da web
O criador de perfil da Web é um módulo de contribuição fornecido por Devel novamente. Depois de habilitar o módulo, você verá um relatório na parte inferior da janela. Sempre que uma página é carregada, este relatório fornece o tempo de carregamento da página, o número de consultas em execução na página, o número de formulários, o número de arquivos js / css, etc. naquela página.

Sim, ainda oferece detalhes de cada seção clicando nelas. Por exemplo, a imagem a seguir mostra as consultas na página inicial.

XDebug - Depuração por meio de IDE:
A melhor e mais amigável maneira de depurar a maioria das pessoas prefere, se estiverem usando um IDE para codificação, é usar o XDebug. XDebug é uma extensão do PHP que ajuda no desenvolvimento e depuração e fornece um depurador de etapa única que pode ser usado com um IDE como o PHPStorm. Obviamente, para obter os melhores resultados, você deve se esforçar mais para instalar e configurar a extensão com o IDE que está usando.

