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
risposta
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.
Per il grafo di controllo di un programma C si poteva guardare parser Python esistenti per C:
- PyCParser
- pycparser
- pyclibrary (fork di pyclibrary)
- joern
- CoFlo C/C++ generatore e analizzatore grafico di flusso di controllo
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
- 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
Uso cscope:
- cscope (BSD)
- cscope + callgraphviz + punto + xdot
- cscope + vim CCTree (C chiamata -tree Explorer)
- cscope + ccglue
- cscope + CodeQuery per C, C++, Python & Java
- cscope + Python html producer
- cscope + calltree.sh
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
utilizzagcc
per produrreRTL
, 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ù robusticflow
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
.
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
- 1. Aggiungi il diagramma del database al controllo del codice sorgente?
- 2. Controllo diagramma di flusso per WPF
- 3. Generazione automatica di diagrammi di flusso dal codice C++
- 4. Diagramma di flusso JavaScript/diagramma di flusso lib
- 5. Generazione del diagramma di classe UML dal codice Smalltalk
- 6. La creazione del diagramma del flusso di lavoro Git viene eseguita tramite uno strumento di progettazione grafico/diagramma di flusso?
- 7. collezioni Scala diagramma di flusso
- 8. Controllo del codice generato implicitamente dal compilatore C++
- 9. Diagramma di flusso altro se
- 10. html5 JavaScript diagramma flusso generatore
- 11. Opzioni GCC per far rispettare il controllo standard Ansi C?
- 12. strumento per generare il diagramma del diagramma di flusso da notazione testuale
- 13. È disponibile uno strumento per il diagramma di flusso?
- 14. diagramma di rete/diagramma di flusso in JQuery
- 15. Libreria Javascript - Albero genealogico Diagramma di flusso
- 16. Ottenere stringa Unicode dal suo codice - C#
- 17. incomprensione del flusso di codice?
- 18. Plugin di Eclipse per generare il diagramma UML dal codice C++
- 19. Macro di controllo del flusso con 'goto'
- 20. Creare il diagramma di flusso in modo programmatico
- 21. Impossibile ottenere il flusso di input audio dal flusso di input
- 22. Schema a blocchi funzione di creazione automatica da codice ansi c
- 23. Quale tipo di diagramma per la documentazione del codice parallelo?
- 24. Come ottenere il nome del metodo corrente dal codice
- 25. "ANSI C" o "ANSI C++" significa ancora oggi?
- 26. Come comprendere a fondo il diagramma del flusso del segnale descritto in SICP?
- 27. Genera il diagramma di flusso html da json o xml
- 28. Monade per il controllo del flusso - Sequenza, selezione e iterazione
- 29. Esiste uno strumento per convertire il codice ANSI C in C#?
- 30. Come ottenere la data selezionata dal controllo del calendario?
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) –