2013-05-06 7 views
8

Sto costruendo uno strumento per testare le applicazioni ansi c. Basta caricare il codice, visualizzare il grafico del flusso di controllo, eseguire il test, contrassegnare tutti i vertici che sono stati colpiti. Sto provando a costruire CFG tutto da solo dal codice di analisi. Purtroppo viene incasinato se il codice è annidato. GCC offre la possibilità di ottenere il codice CFG dal codice compilato. Potrei scrivere parser per il suo output, ma ho bisogno di numeri di linea per impostare i breakpoint. È possibile ottenere i numeri di linea durante l'output del diagramma del flusso di controllo con -fdump-tree-cfg o -fdump-tree-vcg?Ottenere il diagramma del flusso di controllo dal codice ANSI C

+0

Possibile duplicato di [Strumenti per ottenere una funzione grafica grafico del codice di chiamata] (http://stackoverflow.com/questions/517589/tools-to-get-a-pictorial-function-call-graph-of-code) –

risposta

6

Quindi ho fatto qualche ricerca in più e non è difficile ottenere numeri di linea per i nodi. Basta aggiungere l'opzione lineno a una di quelle opzioni per ottenerlo. Quindi utilizzare -fdump-tree-cfg-lineno o -fdump-tree-vcg-lineno. Mi ci è voluto del tempo per verificare se quei numeri sono affidabili. In caso di grafico in VCG l'etichetta di formato di ciascun nodo contiene due numeri. Quelli sono i numeri di riga per l'inizio e la fine della porzione di codice rappresentata da questo nodo.

15

Per il grafo di controllo di un programma C si poteva guardare parser Python esistenti per C:

I grafici delle chiamate sono un costrutto strettamente correlato al controllo dei diagrammi di flusso. Sono disponibili diversi approcci per creare i grafici delle chiamate (dipendenze delle funzioni) per il codice C. Questo potrebbe dimostrarsi di aiuto per progredire con la generazione del grafico del flusso di controllo. modi per creare grafici di dipendenza in C:

  • Uso cflow:

    • CFLOW + pycflow2dot + dot (GPL, BSD) CFLOW è robusto, poiché può gestire codice che non può compilare, ad esempio manca include. Se le direttive del preprocessore sono pesantemente utilizzate, potrebbe essere necessario l'opzione --cpp per preelaborare il codice.
    • CFLOW + cflow2dot + punto (v2 GPL, GPL v3, Eclipse Public License (EPL) v1) (si noti che cflow2dot bisogno di qualche percorso di fissaggio prima che funzioni)
    • CFLOW + cflow2dot.bash (GPL v2,?)
    • CFLOW + cflow2vcg (GPL v2, GPL v2)
    • enhanced cflow (GPL v2) ed elenco per escludere simboli dal grafico
  • Uso cscope:

  • ncc (CFLOW piace)

  • KCachegrind (visualizzatore delle dipendenze di KDE)
  • Calltree

I seguenti strumenti purtroppo richiedere che il codice sia compilabile, perché dipendono uscita da gcc:

  • CodeViz (GPL v2) (punto debole: bisogna sorgente compilabile, perché utilizza gcc per scaricare i file cdepn)
  • gcc + egypt + punto (GPL v *, Perl = GPL | Licenza artistica, EPL v1) (egypt utilizza gcc per produrre RTL, quindi fallisce per qualsiasi codice sorgente buggato, o anche nel caso in cui si desideri concentrarsi su un singolo file da un progetto più grande, quindi non è molto utile rispetto al più robusti cflow toolchain basati. si noti che l'Egitto ha di supporto predefinito buona per escludere chiamate di libreria dal grafico, per renderlo più pulito.

Inoltre, i grafici file di dipendenza per C/C++ possono essere creati con crowfood.

+0

Il grafo delle chiamate non è quello che mi serve. Ho bisogno di rami visivi nel codice. Devo mostrare tutti i loop e i punti decisionali nel codice all'utente. Ho creato il mio parser per VCG, ma controllerò gli strumenti che hai postato. – Eloar

Problemi correlati