Estou trabalhando com uma grande base de código e muitas vezes acho que é entediante e difícil de entender os relacionamentos de classe. Encontrei o wiki a seguir que descreve várias ferramentas para trabalhar com OOP em C ++, mas elas estão desatualizadas ou não funcionam! Quais ferramentas Emacs estão disponíveis para trabalhar com grandes bases de código OO?
Não consigo nem encontrar um link de download para o analisador ... meu destino seria Windows ou Mac OS X Obrigado @ tu-do por apontar que está no diretório emacs bin
Estou escrevendo um guia para o Ebrowse e o lançarei nesta semana.Ebrowse é um analisador rápido usado para processar arquivos de origem C ++ para produzir um banco de dados que contém a hierarquia de classes que é processada posteriormente pelo Emacs para produzir uma representação da árvore de classes. É um pouco como o GNU Global, mas é embutido no Emacs e produz uma árvore de classes, portanto, levará mais tempo para processar na grande árvore de origem.
Para usar o Ebrowse:
find . -name '*.cpp' -or -name '*.h' | ebrowse
Adicione mais extensões, se quiser. Se o seu projeto tiver apenas centenas de arquivos, então = Ebrowse = funciona muito bem. Depois de executar o comando, um arquivo chamado BROWSEé gerado; esse é o banco de dados que contém a hierarquia de classes. Simplesmente abra este arquivo e o Emacs o reconhece e processa automaticamente. Após o processamento do banco de dados, o Emacs exibe um índice de todas as classes no banco de dados em formato de árvore: se uma classe é derivada de uma classe, ela é aninhada dentro da classe pai. Esse buffer é chamado de Tree buffer. O Emacs fornece três maneiras de interagir Ebrowse:
Tree buffer: um buffer que exibe a árvore.
Memberbuffer: um buffer que exibe membros de cada classe. Você pode alternar entre declarações e definições de uma classe e pular para o local de cada uma no arquivo de origem correspondente.
Sourcebuffer: seu buffer de código. Você pode interagir com o Ebrowse
banco de dados, como encontrar e visualizar declarações e definições (abertas para somente leitura), abrir um = Member = buffer de uma classe que contém a tag no ponto ...
Se você tem um projeto grande (ou seja, mais de 10000 arquivos cpp), mas todas as classes estão em .harquivos, não adicione, .cppou então levaria muito tempo para gerar o BROWSEarquivo. Você perderá a capacidade de mudar para a definição; mas isso pode ser feito usando ctagsou GNU Global. O mais importante é visualizar a hierarquia de classes Tree buffere essa é a vantagem do Ebrowse.
Atualização : Como alternativa, você pode usar o doxygen para gerar todos os tipos de gráficos (gráficos de chamadas / chamadas, gráficos de dependência, gráficos de hierarquia de classes ...), mas também leva muito tempo para gerar tudo, mesmo para pequenas árvores de origem como o ipxe . Isso não doxygené lento, na verdade, é bastante otimizado, mas calcular a dependência para toda a base de código não é uma tarefa trivial.
Bônus : Se você trabalha com C e deseja ver o gráfico de chamadas, use o GNU Cflow. Veja meu reddit reddit .
Isso pode parecer bobagem, mas onde posso encontrar o executável "ebrowse"? Não está disponível para Windows ou Mac OS X?
cheezy
@cheezy Ele é instalado junto com o Emacs. Portanto, se você instalar o Emacs, ele deverá estar no bindiretório que contém o Emacs. Portanto, se você puder executar emacsna linha de comando, poderá executar ebrowse.
Tu Do
@cheezy btw, a conclusão funcionou para você?
Tu Do
+1 apenas para a sintaxe da organização. Oh, e eu acho que a resposta é boa, também :)
Sean Allred
@SeanAllred woot não percebeu isso. Corrigido :)
Tu Do
2
Você pode ter uma boa interface de comando para usar interativamente cscope:
mmh, IMO (s) ele não apenas procura uma visão geral da hierarquia de classes (apesar do título), mas também "ferramentas [estão] disponíveis para trabalhar com grandes bases de código OO". cscopeajuda para que (melhor do que etags) e é a última palavra da sua pergunta :)
Ehvince
Bem, em seu tópico anterior, ele já declarou que só etagsé utilizável no projeto, apesar de tentar outras soluções como o GNU Global (que é definitivamente melhor que ctags). Mas para uma hierarquia de classes, o Eborwse ou uma ferramenta externa como o Doxygen é uma opção viável. E a primeira frase é "Eu estou trabalhando com uma grande base de código e, muitas vezes encontrá-lo para ser tedioso e difícil de entender relações de classe " :)
Tu Do
Ah, parece que você está se referindo a outro tópico (do qual eu não estava ciente). cscopeajuda nas relações de classe porque podemos "encontrar quem chama essa classe" e coisas assim. ok, eu não estou perfeitamente no assunto, mas ainda tenho o meu lugar :)
bin
diretório que contém o Emacs. Portanto, se você puder executaremacs
na linha de comando, poderá executarebrowse
.Você pode ter uma boa interface de comando para usar interativamente
cscope
:http://wikemacs.org/wiki/Python#Indexing_sources:_ctags.2C_cscope.2C_pycscope
https://github.com/sergey-pashaev/helm-cscope
Em seguida, temos funções como
M-x helm-cscope-find-global-definition
disponíveis. A navegação é mais rápida.fonte
etags
“Criando tabela de conclusão de tags” Congelamentos / blocos - como desativarcscope
ajuda para que (melhor do queetags
) e é a última palavra da sua pergunta :)etags
é utilizável no projeto, apesar de tentar outras soluções como o GNU Global (que é definitivamente melhor quectags
). Mas para uma hierarquia de classes, o Eborwse ou uma ferramenta externa como o Doxygen é uma opção viável. E a primeira frase é "Eu estou trabalhando com uma grande base de código e, muitas vezes encontrá-lo para ser tedioso e difícil de entender relações de classe " :)cscope
ajuda nas relações de classe porque podemos "encontrar quem chama essa classe" e coisas assim. ok, eu não estou perfeitamente no assunto, mas ainda tenho o meu lugar :)