2017-12-07 2 views
0

gcc hat eine bunch of options, die Sie für die Laufzeitanalyse verwenden können, die während der Ausführung Ihres Programms eine Ausgabe erzeugt.gcc -fprofile-arcs: Wie man eine Datei auf einem benutzerdefinierten RTOS ausgibt

Zum Beispiel: gcc -fprofile-arcs

Add-Code, so dass die Programmflussbögen instrumentiert sind. Während der Ausführung zeichnet das Programm auf, wie oft jede Verzweigung und jeder Aufruf ausgeführt wird und wie oft es zurückgenommen oder zurückgegeben wird. Auf Zielen, die Konstruktoren mit Prioritätsunterstützung unterstützen, behandelt Profiling ordnungsgemäß Konstruktoren, Destruktoren und C++ - Konstruktoren (und Destruktoren) von Klassen, die als ein Typ einer globalen Variablen verwendet werden.

Wenn das kompilierte Programm beendet wird, speichert diese Daten in einer Datei namens auxname.gcda für jede Quelldatei. Die Daten können für profilgesteuerte Optimierungen (-franch-Wahrscheinlichkeiten) oder für den Test Reichweitenanalyse (-test-coverage) verwendet werden. Der auxname jeder Objektdatei wird generiert aus dem Namen der Ausgabedatei, wenn explizit angegeben und es ist nicht die endgültige ausführbare Datei, andernfalls ist es der Basisname der Quelldatei. In beiden Fällen wird jedes Suffix entfernt (z. B. foo.gcda für die Eingabedatei dir/foo.c oder dir/foo.gcda für die Ausgabedatei, die als -o dir/foo.o angegeben ist).

Ich bin eine benutzerdefiniert C++ RTOS ausgeführt wird, die kein Dateisystem, so kann das Programm nicht, wie der bolded Worte Zustand, „Speicher“ die Daten mit dem gleichen Mechanismus wie unter Linux/Windows/QNX hat.

FRAGE

Wie, wenn möglich, konnte ich den Einsatz von -fprofile-arcs (oder eine der anderen Laufzeitprofiloptionen, die eine Datei erzeugen) machen auf meiner benutzerdefinierten RTOS ohne Dateisystem?

Ist es möglich, die Informationen umzuleiten, indem Sie eine "Writer" -Klasse bereitstellen? Wenn ja, könnte ich die Daten auf den PC streamen, indem ich die Schnittstelle nutze, die ich wie JTAG zur Verfügung habe.

Apropos Debugger, ist es möglich, gdb und die JTAG-Verbindung zu irgendwie zu verwenden dieses Problem zu lösen?

Antwort

0

Ich musste etwas ähnliches einmal tun - ich war nach Code Coverage. Glücklicherweise konnte ich eine VectorCast-Lizenz in die Hände bekommen, die die Quelle vor der Kompilation instrumentieren und die Buchhaltung im Speicher abwickeln kann. Ich kann mich nicht erinnern, wie genau ich Stubs für den instrumentierten gcc-Code bereitgestellt habe.

Wenn Sie sich in einer RTOS-Embedded-Umgebung profilieren, können Sie den Programmzähler regelmäßig aufzeichnen und so lange laufen, bis aussagekräftige Daten erfasst werden.

+0

Ich möchte Spuren bei jedem Funktions-Eingang/Ausgang ausgelöst werden. Eigentlich kann ich das schon mit 'gcc -finstrument-functions' machen. Ich denke, ich muss mir nur eine eigene Speicher-Abstraktion einfallen lassen, in der ich die Trace-Informationen speichern kann. – Adrian

Verwandte Themen