Come si cerca il codice base? [chiuso]

5

Sto usando egrep per cercare la nostra base di codice, ma a circa 300 MB di codice sorgente che inizia ad essere un po 'lento. Come si cerca la base di codice?

    
posta Petko M 13.03.2011 - 12:39
fonte

12 risposte

10

Controlla ack da link .

ack is a tool like grep, designed for programmers with large trees of heterogeneous source code.

ack is written purely in Perl, and takes advantage of the power of Perl's regular expressions.

Dal sito:

Top 10 reasons to use ack instead of grep.

  • It's blazingly fast because it only searches the stuff you want searched.
  • ack is pure Perl, so it runs on Windows just fine.
  • The standalone version uses no non-standard modules, so you can put it in your ~/bin without fear.
  • Searches recursively through directories by default, while ignoring .svn, CVS and other VCS directories. Which would you rather type?

    $ grep pattern $(find . -type f | grep -v '\.svn')
    $ ack pattern
    
  • ack ignores most of the crap you don't want to search

    • VCS directories
    • blib, the Perl build directory
    • backup files like foo~ and #foo#
    • binary files, core dumps, etc
  • Ignoring .svn directories means that ack is faster than grep for searching through trees.
  • Lets you specify file types to search, as in --perl or --nohtml. Which would you rather type?

        $ grep pattern $(find . -name '*.pl' -or -name '*.pm' -or -name '*.pod' | grep -v .svn)
        $ ack --perl pattern
    

    Note that ack's --perl also checks the shebang lines of files without suffixes, which the find command will not.

  • File-filtering capabilities usable without searching with ack -f. This lets you create lists of files of a given type.

    $ ack -f --perl > all-perl-files
    
  • Color highlighting of search results.

  • Uses real Perl regular expressions, not a GNU subset.
  • Allows you to specify output using Perl's special variables. Example:

    ack '(Mr|Mr?s)\. (Smith|Jones)' --output='$&' 
    
  • Many command-line switches are the same as in GNU grep:

    • -w does word-only searching
    • -c shows counts per file of matches
    • -l gives the filename instead of matching lines
    • etc.
  • Command name is 25% fewer characters to type! Save days of free-time! Heck, it's 50% shorter compared to grep -r.

Inoltre, c'è questo:

[BinaryMuse ~]: ack --thpppt
_   /|
\'o.O'
=(___)=
   U    ack --thpppt!
    
risposta data 13.03.2011 - 19:14
fonte
9

Con Visual Studios "Trova nei file".

Se il tuo codice base diventa troppo grande potrebbe essere il momento di dividerlo in parti. Allora saprai in quale parte fare la tua ricerca e dovrebbe andare più veloce.

    
risposta data 13.03.2011 - 12:46
fonte
4

AgentRansack è tutto ciò di cui hai bisogno, super veloce.

Altrimenti RegExBuddy .

    
risposta data 13.03.2011 - 17:20
fonte
3

Bene, il primo modo per cercare è il tuo IDE, che sia CodeBlocks, Eclispe, IntelliJ o Visual Studio (o qualsiasi altra cosa) che è destinato ad avere un indice del codice esistente nel progetto e le sue dipendenze.

Quando vogliamo dare un'occhiata al codice di qualcun altro al lavoro, abbiamo un'istanza di OpenGrok . È incredibilmente veloce, davvero, in genere richiede meno di un secondo per darti i risultati della tua ricerca. L'ho usato solo, non configurato, quindi non conosco il lato admin delle cose.

    
risposta data 13.03.2011 - 14:46
fonte
2

Ho visto luoghi che utilizzano Google Search Appliance per cercare codice. Probabilmente questo è eccessivo, anche per 300 MB di codice sorgente. È possibile impostare qualcosa di un po 'più economico usando Apache Solr e un'interfaccia web personalizzata. Potrebbe anche esserci una soluzione pronta per l'uso su queste linee (anche se non ne sono personalmente a conoscenza)

Oltre a questo, di solito utilizzo anche "Trova nei file" di Visual Studio. Dal momento che ha la possibilità di fare una ricerca basata su espressioni regolari o sub-string, e una ricerca basata su sottostringa è molto più veloce, potresti provare anche qualcosa di simile.

    
risposta data 13.03.2011 - 12:56
fonte
2

Cscope con vim per la vista generale del progetto. Consente di saltare alla definizione, ai chiamanti, ai simboli di ricerca o grep per gli identificatori o per passare a un file. Cscope funziona molto bene con il codice C ma armeggia con C ++. ctag esuberanti con taglist plugin per vim per panoramica di file. I ctag esuberanti funzionano bene con C ++ (in realtà sono supportate oltre 40 lingue), ma non supportano il salto ai chiamanti.

Poi c'è un buon vecchio grep per una ricerca rapida e sporca all'interno di un albero dei sorgenti.

    
risposta data 13.03.2011 - 19:30
fonte
1

In realtà in qualche modo grep potrebbe essere il tuo migliore amico! Grep gestirà enormi quantità di dati e potrai raggruppare più greps per ottenere esattamente quello che desideri.

Naturalmente anche essere in grado di utilizzare solo sottoinsiemi del tuo codice base può essere utile.

    
risposta data 13.03.2011 - 15:54
fonte
1

Il mio ambiente di sviluppo principale è Mac OS X e trovo Spotlight molto utile quando ad es. Sto cercando uno snippet di codice che posso riutilizzare.

Quando sono su Linux, di solito utilizzo una combinazione di Trova + grep .

    
risposta data 13.03.2011 - 16:20
fonte
1

Due modi:

  • Il " Ricerca nel codice sorgente incorporato in Github che è molto veloce

  • La funzione "Trova nei file" dell'IDE se cerco località che non sono state ancora inserite nel repository

risposta data 13.03.2011 - 21:24
fonte
1

Puoi diventare molto specifico con Finder

di Mac OSX

O utilizza find , locate e i diversi sapori di grep

Utilizza fgrep se puoi cercare senza espressioni regolari per ottenere risultati più velocemente.

    
risposta data 13.03.2011 - 19:15
fonte
0

Molti ambienti in questi giorni useranno una sorta di indicizzatore per aiutare l'utente a localizzare dove sono definite varie funzioni e variabili. È fantastico se ce l'hai, e non così eccezionale se non lo fai. Se sei interessato principalmente a dove è definita la routine o variabile, ci sono un certo numero di tecniche che possono essere utilizzate per facilitare quella ricerca. Se tuttavia stai cercando di determinare dove sono utilizzati e non hai un indicizzatore, 'grep' (oi suoi derivati) sono probabilmente la soluzione migliore.

  1. Intestazioni di funzioni. Come parte degli standard di codifica nella maggior parte dei posti in cui ho lavorato, ogni routine richiede un commento di una struttura specifica per precederlo. Parte di questo commento include il nome di routine seguito da uno spazio, che a sua volta è seguito da un carattere speciale. A seconda della compagnia, questo personaggio speciale è stato in genere un '-' o un ':'. Ciò non solo semplifica la ricerca della routine quando sai che si trova nel file in cui ti trovi, ma aiuta anche a ottenere risultati chiari e leggibili quando esegui ...

    grep -lrw 'routineName -' *

  2. Convenzioni di denominazione di routine. Tendiamo a denominare le routine utilizzando il modello sottostante. Di conseguenza, basandoci esclusivamente sull'abbreviazione del modulo nel nome, di solito possiamo capire abbastanza rapidamente dove è definita la routine.

    < abbreviazione del modulo > < sostantivo > < verbo >

  3. Convenzioni di denominazione variabili. Tendiamo a nominare le nostre variabili in un modo simile al modo in cui denominiamo le nostre routine. Ancora una volta, l'abbreviazione del modulo ci aiuta a determinare dove è definita la variabile.

    < abbreviazione del modulo > < descrizione >

Spero che questo aiuti.

    
risposta data 13.03.2011 - 15:47
fonte
0

Il software Funduc ha un trio di ricerca e sostituzione dei programmi. Ho solo il Search and Replace Classic , che utilizzo ogni volta che ho bisogno di cercare qualcosa nella mia intera struttura di ricerca. Funziona molto bene, anche con migliaia di file.

    
risposta data 13.03.2011 - 19:03
fonte

Leggi altre domande sui tag