Toda vez que procuro um IDE (atualmente estou mexendo no Go), encontro um tópico cheio de pessoas recomendando Vi, Emacs, Notepad ++ etc.
Eu nunca fiz nenhum desenvolvimento fora de um IDE; Acho que fui mimada. Como você depura sem um IDE? Você está limitado apenas ao registro?
Respostas:
Usando um depurador. Na maioria das vezes, isso também é o que um IDE faz nos bastidores - apenas envolve a experiência em uma GUI.
No Unix, um dos depuradores mais usados é o GNU
gdb
, que substituiu amplamente os depuradores Unix anteriores, comodbx
.Para ter uma idéia da aparência / aparência da depuração na linha de comando, consulte o manual do gdb .
Como em outras áreas, o uso de um depurador na linha de comando exige o aprendizado de uma sintaxe e de um conjunto de comandos, mas traz muita flexibilidade e capacidade de script. Por outro lado, se você já se sente à vontade trabalhando em um editor como o vim ou emacs, pode achar que seu editor favorito possui um plug-in para seu depurador favorito.
fonte
pdb
é realmente melhor do que qualquer depurador IDE que eu encontrei.ipdb
é melhor do que isso;)Eu usei um depurador por vários anos enquanto escrevia drivers gráficos. Eu tinha um segundo computador que executava o depurador no primeiro (porque a tela no computador principal não funcionava quando o driver gráfico estava quebrado). Era essencial poder parar o código e ir até o ponto em que pendurei o hardware para saber o que estava acontecendo.
Para problemas puramente de software, acho que pensar sobre o problema e testar o sistema para aprender mais sobre o problema é muito mais útil do que percorrer o código linha por linha. Com as declarações de impressão, tenho uma lista de tudo o que aconteceu na linha de comando ou no arquivo de log que posso ver e reconstruir o que aconteceu, indo e voltando mais facilmente do que nunca com um depurador.
Os erros mais difíceis geralmente são resolvidos entendendo o problema longe do computador. Às vezes com um pedaço de papel ou quadro branco, e às vezes a resposta se revela enquanto estou fazendo outra coisa. Os bugs mais complicados são resolvidos observando cuidadosamente o código, como jogar Where's Waldo. Todo o resto parece mais fácil com instruções de impressão ou instruções de log.
Pessoas diferentes têm estilos diferentes, e estilos diferentes são melhores para tarefas diferentes. As instruções de impressão não são necessariamente um abandono de um depurador. Dependendo do que você está fazendo, eles podem ser ainda melhores. Especialmente em um idioma que não possui um depurador nativo (o Go?).
fonte
going backwards
. Frequentemente, tenho a experiência: "Ei - espere, isso não é o valor certo! Como isso se tornou isso ?", E tenho que ir e voltar na saída enquanto lê o código. Depuradores são ruins para trás.Algumas pessoas usam o gdb na linha de comando ou em um plugin . Também existem front-ends independentes da GUI para o gdb, como o DDD . Dependendo do seu idioma, existem GUIs de depurador independentes específicas do idioma, como Winpdb para python ou jswat para java. Como esses projetos se concentram apenas na depuração, geralmente são superiores aos depuradores integrados.
O outro pequeno segredo sujo sobre IDEs é que todos valem a pena: permitem especificar um editor personalizado, para que você possa usar partes do IDE para determinadas tarefas, mas use um editor decente para edição. Não é incomum iniciar apenas um IDE para usar seu depurador, especialmente se é isso que todos os seus colegas usam.
fonte
Alguns idiomas oferecem um REPL - ou seja, você pode escrever e executar código linha por linha enquanto o escreve, o que pode ser o primeiro passo na verificação de um trecho de código. Muitos deles também oferecem facilidades de depuração. O GHC para Haskell vem com o GHCi, que pode ser usado para depurar interativamente um programa na linha de comando, semelhante ao que um IDE faria.
fonte
Não entendo por que existe uma aversão à depuração com o uso de instruções printf. Houve um tempo em que demorou muito tempo para recompilar e vincular um programa, mas hoje leva apenas alguns segundos. Acho muito fácil depurar usando o tipo de saída cout, printf, qDebug () etc. As instruções Printf fornecem um histórico de tudo o que o programa fez, que você pode analisar após o fato, enquanto a execução no depurador faz com que você precise se lembrar manualmente do fluxo do programa enquanto ele é executado. Com printf, você pode converter o valor de variáveis em unidades específicas, exibi-las em hexadecimal, decimal, qualquer que seja. As instruções printf podem listar os nomes das rotinas e variáveis e os números das linhas também. Você pode listar apenas certos elementos da matriz, dependendo de outras variáveis. Você pode seguir indiretos. Você pode controlar a saída com muita facilidade, coloque contadores, imprima apenas determinados momentos através de um loop, adicione e remova instruções de impressão enquanto depura, possui diferentes níveis de saída de depuração, grava em arquivos etc. É muito mais fácil ver o histórico do seu programa gravado em um arquivo do que em tente se lembrar de todos os lugares pelos quais você passou manualmente e talvez precise anotar o conteúdo das variáveis conforme elas mudam com o tempo, para descobrir o que o programa fez. E finalmente, com as instruções printf, você pode deixá-las permanentemente, ativadas e desativadas, para depuração futura. é muito mais fácil ver o histórico do seu programa gravado em um arquivo do que tentar lembrar todos os lugares pelos quais você percorreu manualmente e talvez precise anotar o conteúdo das variáveis à medida que elas mudam ao longo do tempo, para descobrir o que o programa foi feito. E finalmente, com as instruções printf, você pode deixá-las permanentemente, ativadas e desativadas, para depuração futura. é muito mais fácil ver o histórico do seu programa gravado em um arquivo do que tentar lembrar todos os lugares pelos quais você percorreu manualmente e talvez precise anotar o conteúdo das variáveis à medida que elas mudam ao longo do tempo, para descobrir o que o programa foi feito. E finalmente, com as instruções printf, você pode deixá-las permanentemente, ativadas e desativadas, para depuração futura.
fonte
jimwise respondeu muito bem à pergunta, mas pensei em acrescentar que, caso você opte por trabalhar sem um IDE completo, o Microsoft que fornece o depurador de linha de comando para Windows é chamado CDB . O CDB vem com várias outras ferramentas, incluindo o WinDBG, que é o equivalente da GUI, quando você baixa o Windows SDK.
fonte
Normalmente, não uso um depurador, talvez uma vez a cada duas semanas, mas não é a primeira coisa que vou.
A ferramenta mais importante no meu trabalho é tão onipresente que quase me esqueci de mencioná-la - empilhar rastreamentos. Mais de 90% dos problemas que encontro podem ser resolvidos examinando um rastreamento de pilha. Essa ferramenta nem sempre é muito útil, dependendo do seu idioma, mas quando eles são implementados bem por um idioma, você pode economizar uma quantidade incrível de tempo.
Acho que a segunda maneira mais comum de detectar problemas simples é que provavelmente é o código que acabei de alterar. Eu executo testes de unidade com frequência, então geralmente sei o que acabei de quebrar.
Para desenvolvimento e depuração mais complexos, posso adicionar algumas instruções de log no nível de depuração ou rastreamento. Considero os problemas de desenvolvimento um bom guia para me ajudar a colocar informações de log de rastreamento / depuração da produção, o que me leva a:
Você nem sempre tem um depurador à mão. Na produção, pode ser impossível executar um depurador (Heck, pode ser impossível acessar as máquinas de produção, exceto os logs, dependendo da segurança da sua empresa). Também existem idiomas nos quais conectar um depurador leva muito tempo ou talvez não haja bons depuradores disponíveis.
Se você estiver codificando o tempo todo usando o log de nível de lógica e depuração / rastreamento, pode ser simplesmente o caso de examinar suas excelentes instruções de log (possivelmente aumentando o nível de log) para descobrir o problema sem acessar o hardware.
Embora eu ache que os depuradores são uma ferramenta poderosa, não permita que eles sejam a única ferramenta na sua caixa de ferramentas!
fonte
Não há razão para que você não possa usar o depurador em um IDE ao lado de um editor de texto independente. Eu costumava usar o! Zap para editar, o JBuilder para depurar em outra máquina e um servidor de arquivos no porão. Tradicionalmente, depuradores eram programas independentes sem arrastar ao longo de um IDE, e isso também funciona.
Vale notar que testes abrangentes substituem a depuração. Vale a pena considerar um bug relatado como sendo um bug nos seus testes e não no seu código.
Há também
printf
. Pode ser útil criar uma grande quantidade de "log" e pesquisar por ele, em vez de parar para cada linha. Acho particularmente útil se você pode modificar classes de bibliotecas que você não seria capaz de modificar em produção, por exemplo, usando-Xbootclasspath/p:
para hackear classes de bibliotecas Java.fonte
Concorde que o melhor dos problemas pode ser resolvido fora do computador com caneta e papel ou apenas pensando no problema. Isso é mais útil do que usar depuradores ao vivo. Muitas vezes, corrige seu processo de raciocínio.
Você pode usar o pudb, que é um console baseado em uma interface de usuário simples. Você pode escolher seu depurador preferido, como pdb ou ipdb, se desejar inserir um REPL e examinar com mais detalhes.
Além disso, consulte o PythonDebuggingTools Wiki para obter uma coleção mais abrangente de ferramentas disponíveis.
fonte