Eu acredito que esta é uma ótima pergunta! Quando você não sabe como abordar a depuração do PHP, nem sabe como formular sua pergunta, não sabe como ser mais preciso do que isso. Portanto, pode não obedecer às regras do Stack, mas certamente nos ajuda, iniciantes, muito!
precisa
11
a partir do php5.4, introduziu um novo depurador de interface de linha de comando chamado phpdbg ( phpdbg.com ). O PHP5.6 virá com o phpdbg padrão.
Ganesh Patil
11
Já ouviu falar do XDebug? :)
Pratik
Respostas:
145
Experimente o Eclipse PDT para configurar um ambiente Eclipse que possui recursos de depuração como você mencionou. A capacidade de entrar no código é uma maneira muito melhor de depurar do que o antigo método var_dump e imprimir em vários pontos para ver onde seu fluxo está errado. No entanto, quando tudo o mais falha e tudo o que tenho é SSH e vim, ainda var_dump()/ die()para descobrir onde o código vai para o sul.
O plugin DBGp não funciona com a versão atual do bloco de notas ++ / xdebug e não há planos para corrigi-lo. Você pode ver minha discussão com o criador do link aqui
Joe
26
O XDebug é essencial para o desenvolvimento. Eu o instalo antes de qualquer outra extensão. Ele fornece rastreamentos de empilhamento em qualquer erro e você pode ativar a criação de perfil facilmente.
Para uma rápida olhada em uma estrutura de dados, use var_dump(). Não use, print_r()pois você precisará cercá-lo <pre>e ele imprime apenas um var por vez.
<?php var_dump(__FILE__, __LINE__, $_REQUEST);?>
Para um ambiente de depuração real, o melhor que encontrei é o Komodo IDE, mas custa $$.
PhpEd é realmente bom. Você pode entrar / sair / sair de funções. Você pode executar código ad-hoc, inspecionar variáveis, alterar variáveis. É maravilhoso.
Eu usei o PhpEd e não tenho palavras gentis para ele quando comparado a um IDE real como o NetBeans ou o Eclipse, nem esse comentário adiciona algo útil à pergunta. -1
siliconrockstar
Tentei a maioria dos IDEs (incluindo Zend, NetBeans e Eclipse) antes de comprar o PhpED Professional, porque era o melhor por uma milha e meia. Isso foi há alguns anos atrás, então os outros podem ter melhorado desde então, mas na época a maioria deles era dolorosamente lenta porque havia sido escrita em Java. Eu não entendo como alguém pode ter "nenhuma palavra gentil para isso" quando (para mim) era claramente a melhor, a decisão era óbvia.
Lm713
17
1) Eu uso print_r (). No TextMate, tenho um trecho para 'pre' que se expande para isso:
echo "<pre>";
print_r();
echo "</pre>";
2) Eu uso o Xdebug, mas não consegui fazer a GUI funcionar corretamente no meu Mac. Pelo menos, imprime uma versão legível do rastreamento de pilha.
Tenho certeza que você quer dizer eco "</pre>"; no final embora.
Altermativ 29/07/09
9
Você também pode passar 'true' para a função para que ela retorne a string. Isso significa que você pode fazer isso:echo '<pre>', print_r($var, true), '</pre>';
DisgruntledGoat
16
Eu usei o Zend Studio (5.5) , juntamente com a Zend Platform . Isso fornece depuração adequada, pontos de interrupção / revisão do código etc., embora a um preço.
Com toda a honestidade, uma combinação de print e print_r () para imprimir as variáveis. Eu sei que muitos preferem usar outros métodos mais avançados, mas acho isso o mais fácil de usar.
Eu direi que não apreciei totalmente isso até fazer alguma programação de microprocessador na Uni e não fui capaz de usar nem isso.
Fico feliz que você tenha mencionado print e print_r, utilizo uma impressão básica para verificar se o código foi executado em um determinado ponto, o que ajuda a isolar o problema.
Brad
Eu uso ambos print e var_dump (). Uso print para exibir mensagens e informações de depuração e var_dump para indicar o estado das variáveis conforme as coisas progridem.
21379 Joshua K
14
Xdebug , de Derick Rethans, é muito bom. Eu o usei há algum tempo e achei que não era tão fácil de instalar. Quando terminar, você não entenderá como gerenciou sem ele :-)
Não é apenas uma instalação frustrante. Configurar o Xdebug para funcionar com o Eclipse pode ser um pesadelo. Eu era capaz de conseguir Xdebug instalado no CentOS 5, mas EclipsePDT + Xdebug não quer cooperar :(
Jahangir
11
Eu uso o Netbeans com o XDebug. Confira em seu site para obter documentos sobre como configurá-lo.
http://php.netbeans.org/
O complemento é essencial quando você depura projetos MVC, porque a maneira normal de executar o XDebug no Netbeans é registrar a sessão dbug por meio do URL. Com o complemento instalado no FireFox, você definiria as propriedades do projeto Netbeans -> Executar configuração -> Avançado e selecione "Não abrir o navegador da Web". Agora você pode definir seus pontos de interrupção e iniciar a sessão de depuração com Ctrl-F5, como de costume . Abra o FireFox e clique com o botão direito do mouse no ícone Add-on no canto inferior direito para iniciar o monitoramento de pontos de interrupção. Quando o código atinge o ponto de interrupção, ele para e você pode inspecionar seus estados variáveis e pilha de chamadas.
Para os problemas realmente difíceis que seriam muito demorados para usar print_r / echo para descobrir, eu uso o recurso de depuração do meu IDE (PhpEd). Ao contrário de outros IDEs que usei, o PhpEd não requer praticamente nenhuma configuração. a única razão pela qual não o uso para problemas que encontro é que é dolorosamente lento. Não tenho certeza de que a lentidão seja específica para o PhpEd ou qualquer depurador php. O PhpEd não é gratuito, mas acredito que ele use um dos depuradores de código aberto (como o XDebug mencionado anteriormente) de qualquer maneira. O benefício com o PhpEd, novamente, é que ele não requer nenhuma configuração que eu achei realmente muito tediosa no passado.
O depurador do PHPEd é realmente escrito pelo mesmo cara que escreveu o PHPEd e tenho certeza de que não é de código aberto. Pelo menos o PHPEd não é fornecido com a fonte, mas compilou .so e .dll.
Artem Russakovskii
4
A depuração manual é geralmente mais rápida para mim - var_dump()e debug_print_backtrace()são todas as ferramentas que você precisa para armar sua lógica.
Bem, até certo ponto, depende de onde as coisas estão indo para o sul. Essa é a primeira coisa que tento isolar, e então usarei echo / print_r () conforme necessário.
NB: Vocês sabem que você pode passar true como um segundo argumento para print_r () e ele retornará a saída em vez de imprimi-la? Por exemplo:
Eu apenas envolvo isso em uma função chamada debug. Então eu posso fazer depuração ($ var);
jdelator
3
Costumo usar o CakePHP quando o Rails não é possível. Para depurar erros, geralmente encontro a error.logpasta tmp e o atuo no terminal com o comando ...
tail -f app/tmp/logs/error.log
Ele fornece a você a caixa de diálogo em execução do bolo do que está acontecendo, o que é bastante útil, se você quiser produzir algo para ele no meio do código, você pode usar.
$this->log('xxxx');
Isso geralmente pode lhe dar uma boa idéia do que está acontecendo / errado.
O Komodo IDE funciona bem com o xdebug, mesmo para a depuração remore. Ele precisa de uma quantidade mínima de configuração. Tudo o que você precisa é de uma versão do php que o Komodo possa usar localmente para percorrer o código em um ponto de interrupção. Se você tiver o script importado para o projeto komodo, poderá definir pontos de interrupção com um clique do mouse, exatamente como o definiria dentro do eclipse para depurar um programa java. A depuração remota é obviamente mais complicada para que funcione corretamente (talvez seja necessário mapear a URL remota com um script php no seu espaço de trabalho) do que uma configuração de depuração local, que é muito fácil de configurar se você estiver em um desktop MAC ou Linux .
Existem muitas técnicas de depuração do PHP que podem economizar inúmeras horas durante a codificação. Uma técnica de depuração eficaz, porém básica, é simplesmente ativar o relatório de erros. Outra técnica um pouco mais avançada envolve o uso de instruções de impressão, que podem ajudar a identificar erros mais esquivos exibindo o que realmente está acontecendo na tela. PHPeclipse é um plug-in do Eclipse que pode destacar erros de sintaxe comuns e pode ser usado em conjunto com um depurador para definir pontos de interrupção.
eu uso o zend studio para eclipse com o depurador embutido. Ainda é lento comparado à depuração com o eclipse pdt com xdebug. Esperemos que eles resolvam esses problemas, a velocidade melhorou em relação aos lançamentos recentes, mas ainda assim o processo demora de 2 a 3 segundos. A barra de ferramentas do zend firefox realmente facilita as coisas (depurar a próxima página, a página atual, etc.). Também fornece um criador de perfil que fará referência ao seu código e fornecer gráficos de pizza, tempo de execução etc.
A maioria dos erros pode ser facilmente encontrada simplesmente var_dump algumas das principais variáveis, mas obviamente depende do tipo de aplicativo que você desenvolve.
Para algoritmos mais complexos, as funções step / breakpoint / watch são muito úteis (se não for necessário)
O Interactive Stepthrough PHP Debugger implementado como um módulo SAPI, que pode fornecer controle total sobre o ambiente sem afetar a funcionalidade ou o desempenho do seu código. Ele tem como objetivo ser uma plataforma de depuração leve, poderosa e fácil de usar para o PHP 5.4+ e é fornecida de fábrica com o PHP 5.6.
Os recursos incluem:
Depuração passo a passo
Pontos de interrupção flexíveis (método de classe, função, arquivo: linha, endereço, código de operação)
Fácil acesso ao PHP com eval () integrado
Acesso fácil ao código atualmente em execução
API do Userland
SAPI Agnóstico - Facilmente Integrado
Suporte ao arquivo de configuração PHP
Super Globals de JIT - ajuste seus próprios !!
Suporte opcional ao readline - Operação confortável do terminal
Se o seu sistema suportar o rastreamento dinâmico do DTrace (instalado por padrão no OS X) e o seu PHP for compilado com as sondas do DTrace ativadas ( --enable-dtrace), que devem ser por padrão, este comando poderá ajudá-lo a depurar o script PHP sem tempo:
Para testar isso, você pode acessar qualquer docroot index.phpe executar o servidor interno do PHP:
php -S localhost:8080
Depois disso, você pode acessar o site em http: // localhost: 8080 / (ou escolher qualquer porta que for conveniente para você). A partir daí, acesse algumas páginas para ver a saída do rastreio.
Nota: O Dtrace está disponível no OS X por padrão, no Linux você provavelmente precisará do dtrace4linux ou procure outras alternativas .
Como alternativa, verifique o rastreio do SystemTap instalando o pacote de desenvolvimento do SystemTap SDT (por exemplo yum install systemtap-sdt-devel).
Aqui está um exemplo de script ( all_probes.stp) para rastrear todos os principais pontos de análise estática do PHP durante toda a duração de um script PHP em execução com o SystemTap:
+1 para print_r (). Use-o para despejar o conteúdo de um objeto ou variável. Para torná-lo mais legível, faça-o com uma pré tag para que você não precise visualizar a fonte.
echo '<pre>';
print_r($arrayOrObject);
Também var_dump ($ thing) - isso é muito útil para ver o tipo de sub-coisas
Dependendo do problema, eu gosto de uma combinação de error_reporting (E_ALL) misturada com testes de eco (para encontrar a linha / arquivo incorreto no qual o erro ocorreu inicialmente; você SABE que nem sempre a linha / arquivo php diz a você certo?), IDE brace matching (para resolver os problemas "Erro de análise: erro de sintaxe, $ end inesperados") e print_r (); Saída; despejos (programadores reais visualizam a fonte; p).
Você também não pode vencer o phpdebug (verifique o sourceforge) com "memory_get_usage ();" e "memory_get_peak_usage ();" para encontrar as áreas problemáticas.
Os depuradores integrados, nos quais você pode observar os valores das variáveis mudarem conforme você percorre o código, são realmente legais. No entanto, eles exigem configuração de software no servidor e uma certa quantidade de configuração no cliente. Ambos requerem manutenção periódica para manter o bom funcionamento.
Um print_r é fácil de escrever e é garantido que funcione em qualquer configuração.
Normalmente, acho que criar uma função de log personalizada capaz de salvar em arquivo, armazenar informações de depuração e, eventualmente, reimprimir em um rodapé comum.
Você também pode substituir a classe Exception comum, para que esse tipo de depuração seja semi-automatizado.
Respostas:
Experimente o Eclipse PDT para configurar um ambiente Eclipse que possui recursos de depuração como você mencionou. A capacidade de entrar no código é uma maneira muito melhor de depurar do que o antigo método var_dump e imprimir em vários pontos para ver onde seu fluxo está errado. No entanto, quando tudo o mais falha e tudo o que tenho é SSH e vim, ainda
var_dump()
/die()
para descobrir onde o código vai para o sul.fonte
kill($data) { echo "<pre>"; var_dump($data); echo "</pre>"; exit; }
Você pode usar o Firephp, um complemento para o firebug, para depurar o php no mesmo ambiente que o javascript.
Eu também uso o Xdebug mencionado anteriormente para criar um perfil de php.
fonte
Este é o meu pequeno ambiente de depuração:
fonte
assert_callcack
hehXdebug e o plug-in DBGp para o Notepad ++ para caça de bugs pesados, FirePHP para coisas leves. Rapido e sujo? Nada supera o dBug .
fonte
O XDebug é essencial para o desenvolvimento. Eu o instalo antes de qualquer outra extensão. Ele fornece rastreamentos de empilhamento em qualquer erro e você pode ativar a criação de perfil facilmente.
Para uma rápida olhada em uma estrutura de dados, use
var_dump()
. Não use,print_r()
pois você precisará cercá-lo<pre>
e ele imprime apenas um var por vez.Para um ambiente de depuração real, o melhor que encontrei é o Komodo IDE, mas custa $$.
fonte
PhpEd é realmente bom. Você pode entrar / sair / sair de funções. Você pode executar código ad-hoc, inspecionar variáveis, alterar variáveis. É maravilhoso.
fonte
1) Eu uso print_r (). No TextMate, tenho um trecho para 'pre' que se expande para isso:
2) Eu uso o Xdebug, mas não consegui fazer a GUI funcionar corretamente no meu Mac. Pelo menos, imprime uma versão legível do rastreamento de pilha.
fonte
echo '<pre>', print_r($var, true), '</pre>';
Eu usei o Zend Studio (5.5) , juntamente com a Zend Platform . Isso fornece depuração adequada, pontos de interrupção / revisão do código etc., embora a um preço.
fonte
Com toda a honestidade, uma combinação de print e print_r () para imprimir as variáveis. Eu sei que muitos preferem usar outros métodos mais avançados, mas acho isso o mais fácil de usar.
Eu direi que não apreciei totalmente isso até fazer alguma programação de microprocessador na Uni e não fui capaz de usar nem isso.
fonte
Xdebug , de Derick Rethans, é muito bom. Eu o usei há algum tempo e achei que não era tão fácil de instalar. Quando terminar, você não entenderá como gerenciou sem ele :-)
Há um bom artigo sobre o Zend Developer Zone (a instalação no Linux não parece mais fácil) e até um plugin do Firefox , que eu nunca usei.
fonte
Eu uso o Netbeans com o XDebug. Confira em seu site para obter documentos sobre como configurá-lo. http://php.netbeans.org/
fonte
Uso o Netbeans com o XDebug e o complemento Easy XDebug FireFox
O complemento é essencial quando você depura projetos MVC, porque a maneira normal de executar o XDebug no Netbeans é registrar a sessão dbug por meio do URL. Com o complemento instalado no FireFox, você definiria as propriedades do projeto Netbeans -> Executar configuração -> Avançado e selecione "Não abrir o navegador da Web". Agora você pode definir seus pontos de interrupção e iniciar a sessão de depuração com Ctrl-F5, como de costume . Abra o FireFox e clique com o botão direito do mouse no ícone Add-on no canto inferior direito para iniciar o monitoramento de pontos de interrupção. Quando o código atinge o ponto de interrupção, ele para e você pode inspecionar seus estados variáveis e pilha de chamadas.
fonte
O buffer de saída é muito útil se você não quiser atrapalhar sua saída. Eu faço isso em uma linha que eu posso comentar / descomentar à vontade
fonte
O PhpEdit possui um depurador embutido, mas eu geralmente acabo usando echo (); e print_r (); à moda antiga !!
fonte
Para os problemas realmente difíceis que seriam muito demorados para usar print_r / echo para descobrir, eu uso o recurso de depuração do meu IDE (PhpEd). Ao contrário de outros IDEs que usei, o PhpEd não requer praticamente nenhuma configuração. a única razão pela qual não o uso para problemas que encontro é que é dolorosamente lento. Não tenho certeza de que a lentidão seja específica para o PhpEd ou qualquer depurador php. O PhpEd não é gratuito, mas acredito que ele use um dos depuradores de código aberto (como o XDebug mencionado anteriormente) de qualquer maneira. O benefício com o PhpEd, novamente, é que ele não requer nenhuma configuração que eu achei realmente muito tediosa no passado.
fonte
A depuração manual é geralmente mais rápida para mim -
var_dump()
edebug_print_backtrace()
são todas as ferramentas que você precisa para armar sua lógica.fonte
Bem, até certo ponto, depende de onde as coisas estão indo para o sul. Essa é a primeira coisa que tento isolar, e então usarei echo / print_r () conforme necessário.
NB: Vocês sabem que você pode passar true como um segundo argumento para print_r () e ele retornará a saída em vez de imprimi-la? Por exemplo:
fonte
Costumo usar o CakePHP quando o Rails não é possível. Para depurar erros, geralmente encontro a
error.log
pasta tmp e o atuo no terminal com o comando ...Ele fornece a você a caixa de diálogo em execução do bolo do que está acontecendo, o que é bastante útil, se você quiser produzir algo para ele no meio do código, você pode usar.
Isso geralmente pode lhe dar uma boa idéia do que está acontecendo / errado.
fonte
print_r (debug_backtrace ());
ou algo assim :-)
fonte
O Komodo IDE funciona bem com o xdebug, mesmo para a depuração remore. Ele precisa de uma quantidade mínima de configuração. Tudo o que você precisa é de uma versão do php que o Komodo possa usar localmente para percorrer o código em um ponto de interrupção. Se você tiver o script importado para o projeto komodo, poderá definir pontos de interrupção com um clique do mouse, exatamente como o definiria dentro do eclipse para depurar um programa java. A depuração remota é obviamente mais complicada para que funcione corretamente (talvez seja necessário mapear a URL remota com um script php no seu espaço de trabalho) do que uma configuração de depuração local, que é muito fácil de configurar se você estiver em um desktop MAC ou Linux .
fonte
Nusphere também é um bom depurador para php nusphere
fonte
Existem muitas técnicas de depuração do PHP que podem economizar inúmeras horas durante a codificação. Uma técnica de depuração eficaz, porém básica, é simplesmente ativar o relatório de erros. Outra técnica um pouco mais avançada envolve o uso de instruções de impressão, que podem ajudar a identificar erros mais esquivos exibindo o que realmente está acontecendo na tela. PHPeclipse é um plug-in do Eclipse que pode destacar erros de sintaxe comuns e pode ser usado em conjunto com um depurador para definir pontos de interrupção.
e também usado
fonte
Em um ambiente de produção, registro dados relevantes no log de erros do servidor com error_log ().
fonte
eu uso o zend studio para eclipse com o depurador embutido. Ainda é lento comparado à depuração com o eclipse pdt com xdebug. Esperemos que eles resolvam esses problemas, a velocidade melhorou em relação aos lançamentos recentes, mas ainda assim o processo demora de 2 a 3 segundos. A barra de ferramentas do zend firefox realmente facilita as coisas (depurar a próxima página, a página atual, etc.). Também fornece um criador de perfil que fará referência ao seu código e fornecer gráficos de pizza, tempo de execução etc.
fonte
A maioria dos erros pode ser facilmente encontrada simplesmente
var_dump
algumas das principais variáveis, mas obviamente depende do tipo de aplicativo que você desenvolve.Para algoritmos mais complexos, as funções step / breakpoint / watch são muito úteis (se não for necessário)
fonte
DBG do PHP
O Interactive Stepthrough PHP Debugger implementado como um módulo SAPI, que pode fornecer controle total sobre o ambiente sem afetar a funcionalidade ou o desempenho do seu código. Ele tem como objetivo ser uma plataforma de depuração leve, poderosa e fácil de usar para o PHP 5.4+ e é fornecida de fábrica com o PHP 5.6.
Os recursos incluem:
Veja as capturas de tela:
Página inicial: http://phpdbg.com/
Erro PHP - Melhor relatório de erros para PHP
É muito fácil usar a biblioteca (na verdade um arquivo) para depurar seus scripts PHP.
A única coisa que você precisa fazer é incluir um arquivo como abaixo (no início do seu código):
Todos os erros fornecerão informações como backtrace, contexto de código, argumentos de função, variáveis de servidor etc. Por exemplo:
Características incluem:
Página inicial: http://phperror.net/
GitHub: https://github.com/JosephLenton/PHP-Error
Meu fork (com correções extras): https://github.com/kenorb-contrib/PHP-Error
DTrace
Se o seu sistema suportar o rastreamento dinâmico do DTrace (instalado por padrão no OS X) e o seu PHP for compilado com as sondas do DTrace ativadas (
--enable-dtrace
), que devem ser por padrão, este comando poderá ajudá-lo a depurar o script PHP sem tempo:Portanto, dado o seguinte alias foi adicionado aos seus arquivos rc (por exemplo
~/.bashrc
,~/.bash_aliases
):você pode traçar seu roteiro com fácil de lembrar apelido:
trace-php
.Aqui está um script dtrace mais avançado, salve-o
dtruss-php.d
, torne-o executável (chmod +x dtruss-php.d
) e execute:Página inicial: dtruss-lamp no GitHub
Aqui está o uso simples:
sudo dtruss-php.d
.php -r "phpinfo();"
.Para testar isso, você pode acessar qualquer docroot
index.php
e executar o servidor interno do PHP:Depois disso, você pode acessar o site em http: // localhost: 8080 / (ou escolher qualquer porta que for conveniente para você). A partir daí, acesse algumas páginas para ver a saída do rastreio.
Nota: O Dtrace está disponível no OS X por padrão, no Linux você provavelmente precisará do dtrace4linux ou procure outras alternativas .
Veja: Usando PHP e DTrace em php.net
SystemTap
Como alternativa, verifique o rastreio do SystemTap instalando o pacote de desenvolvimento do SystemTap SDT (por exemplo
yum install systemtap-sdt-devel
).Aqui está um exemplo de script (
all_probes.stp
) para rastrear todos os principais pontos de análise estática do PHP durante toda a duração de um script PHP em execução com o SystemTap:Uso:
Consulte: Usando o SystemTap com probes estáticos do PHP DTrace em php.net
fonte
+1 para print_r (). Use-o para despejar o conteúdo de um objeto ou variável. Para torná-lo mais legível, faça-o com uma pré tag para que você não precise visualizar a fonte.
Também var_dump ($ thing) - isso é muito útil para ver o tipo de sub-coisas
fonte
Dependendo do problema, eu gosto de uma combinação de error_reporting (E_ALL) misturada com testes de eco (para encontrar a linha / arquivo incorreto no qual o erro ocorreu inicialmente; você SABE que nem sempre a linha / arquivo php diz a você certo?), IDE brace matching (para resolver os problemas "Erro de análise: erro de sintaxe, $ end inesperados") e print_r (); Saída; despejos (programadores reais visualizam a fonte; p).
Você também não pode vencer o phpdebug (verifique o sourceforge) com "memory_get_usage ();" e "memory_get_peak_usage ();" para encontrar as áreas problemáticas.
fonte
Os depuradores integrados, nos quais você pode observar os valores das variáveis mudarem conforme você percorre o código, são realmente legais. No entanto, eles exigem configuração de software no servidor e uma certa quantidade de configuração no cliente. Ambos requerem manutenção periódica para manter o bom funcionamento.
Um print_r é fácil de escrever e é garantido que funcione em qualquer configuração.
fonte
Normalmente, acho que criar uma função de log personalizada capaz de salvar em arquivo, armazenar informações de depuração e, eventualmente, reimprimir em um rodapé comum.
Você também pode substituir a classe Exception comum, para que esse tipo de depuração seja semi-automatizado.
fonte