2010-12-14 9 views
10

Sono rimasto affascinato dalla funzione "Stampa scheda per cercare il sito" in cromo, quindi naturalmente volevo vedere come è stato implementato esattamente nel codice.Come si trova una particolare funzionalità in una base di codice di grandi dimensioni?

Un piccolo background per chi non ha familiarità con questo. Dopo aver navigato in un sito, dire wikipedia e fare una ricerca, chromium ricorda il nome della variabile di query e ti consente di premere tab e cercare il sito direttamente dalla barra degli indirizzi. Neat!

Il problema è che la base di codice per il cromo è enorme e non ho avuto fortuna nel trovare il metodo/funzione che gestisce questo.

Come ci si avvicina a una base di codice di grandi dimensioni quando si sta cercando l'implementazione di una particolare funzionalità? Qualche trucco per restringerlo? Preferibilmente non dovrebbe richiedere di costruire il software con i simboli di debug e di seguire il flusso attraverso il programma.

+0

Per quanto riguarda il problema specifico, Google Chrome è il motore di browser WebKit di Apple e molti Googlism. Avendo lavorato all'interno di WebKit, sospetto che troverete che l'implementazione di questa funzione è sparpagliata tra diversi file sorgente, forse in directory sorgenti ampiamente separate. –

risposta

10

Non esiste una soluzione adatta a questo tipo di problema. Ma per questo mi piacerebbe provare questi:

  • Se ci sono messaggi unici associati all'operazione, grep tutti i file di origine per quella stringa. Una trappola comune a questa tecnica è che i messaggi potrebbero essere assemblati da pezzi all'interno dell'applicazione, quindi è spesso utile fare un grep per una breve frase unica o anche una singola parola per identificare la fonte del messaggio. Una volta trovato il testo, quindi trovare ciò che fa riferimento spesso richiede più ricerche di testo.

  • Esecuzione di traccia da un punto facile da trovare, come il ciclo di elaborazione e invio dei comandi. Cercherei un portachiavi Tab e seguirò dove conduce.

  • Consultare la directory del codice sorgente e il nome del file per i suggerimenti. Il software è spesso costruito razionalmente, con buoni ingegneri che dividono e conquistano in modo ragionevole.

+0

+1 Un editor con una funzione di ricerca ricorsiva veloce è tuo amico qui. Io spesso ne uso uno per pescare parole che penso possano essere connesse alla funzione che voglio, e poi se ottengo quello che sembra una routine correlata, comincio a vedere quello che chiama e quello che lo chiama. –

+0

Quando la base di codice diventa grande (milioni di righe), "ricerca ricorsiva" e "grep" smettono di essere utili, richiedono troppo tempo e producono troppi riscontri positivi falsi. Quindi è necessario un motore di ricerca del codice sensibile alla lingua che indicizzi il codice di base per accelerare le ricerche e minimizzare i falsi accessi. Il nostro motore di ricerca gestisce bene basi di codice grandi e miste: http: //www.semanticdesigns.it/Prodotti/SearchEngine –

6

Uno strumento di copertura di prova è un buon modo per farlo. Ti dicono quale parte di un'applicazione viene esercitata da un test.

Strumento per l'applicazione per la copertura del test. Esegui la funzionalità che ti interessa. Registra ciò che viene eseguito. Esegui qualcosa di simile, ma non uguale alla funzionalità che desideri. Registra questo. Prendi la differenza impostata sulla copertura. Il diff seleziona il codice coinvolto nella funzionalità di interesse, escludendo il codice che è comune a funzionalità simili.

+0

Ottima idea! (Naturalmente aveva 0 voti). –

+0

Sembra interessante. Mai usato uno strumento di copertura del test prima. Qualche raccomandazione per C/C++? gcov sembra un candidato ovvio. – hanDerPeder

+0

gcov può raccogliere i dati di copertura, ma AFAIK è scomodo calcolare la differenza di copertura del test. La mia azienda offre anche strumenti di copertura di prova per molte lingue, tra cui C, C++, C#, Java, .... Questi strumenti offrono la possibilità di catturare entrambi i vettori di copertura del test e calcolare la differenza impostata direttamente e facilmente. Vedi http://www.semanticdesigns.com/Products/TestCoverage –

0

Ask the Chromium team. Non danno punti o pixel di bronzo, ma sono sicuramente l'autorità e le persone giuste a fare questo tipo di domande.

+1

Questa non è una risposta utile. La domanda riguarda gli approcci in generale. – zoom23

+0

Non è così. È molto specifico – wilhelmtell

+0

@ Wilhelm No, è una domanda molto generale. La cosa di cromo è stata appena data come esempio. – Maxpm

Problemi correlati