Lauterbach: Hypervisor Debugging

PRODUKT NEWS EMBEDDED SYSTEMS

Das Konzept der Virtualisierung ermöglicht es, mehrere Betriebssysteme gleichzeitig nebeneinander auf einer Hardware-Plattform zu betreiben. Die Virtualisierung kommt heutzutage zunehmend auch für Embedded-Systeme zum Einsatz, beispielsweise im Cockpit eines Autos. Echtzeitanwendungen, die klassisch von einem AUTOSAR-Betriebssystem überwacht werden, laufen hier parallel zu Android-basierten User-Interfaces auf derselben Hardware-Plattform. Ein Hypervisor, das Kernstück der Virtualisierung, sorgt dafür, dass alles sicher und effizient funktioniert.



Der Lauterbach-Debugger Trace32 wurde erweitert, um ein uneingeschränktes Debugging mit Hypervisor zu ermöglichen. Dazu wurden folgende Erweiterungen durchgeführt:

  • Virtuelle Adressen wurden um eine sog. "Machine-ID" erweitert. Diese erlaubt es, sowohl auf den Kontext der aktiven VM als auch auf den Kontext aller inaktiven VMs zuzugreifen.
  • Mittels der neuen Hypervisor-Awareness erkennt und visualisiert der Debugger die VMs des Hypervisors.
  • Statt eines einzelnen Betriebssystems lassen sich nun mehrere Betriebssysteme gleichzeitig debuggen.

Die wichtigste Zielsetzung für alle Erweiterungen war ein nahtloses Debugging des Gesamtsystems. D.h., wenn das System an einem Breakpoint angehalten hat, kann man den aktuellen Zustand jedes einzelnen Prozesses, aller VMs, den aktuellen Zustand des Hypervisors und der realen Hardware-Plattform überprüfen. Zudem kann man an jede beliebige Stelle des Codes einen Programm-Breakpoint setzen.

 

Analog zur OS-Awareness gibt es jetzt auch eine Hypervisor-Awareness. Durch sie erhält der Debugger alle Informationen über den auf der Hardware-Plattform laufenden Hypervisor. Die Awareness für die jeweiligen Hypervisoren wird von Lauterbach erstellt und seinen Kunden verfügbar gemacht.

 

Bei der Bedienung eines Debuggers stehen sich meist widersprüchliche Anforderungen gegenüber. Die eine Nutzergruppe wünscht sich eine einfache und intuitive Bedienung, während eine andere maximale Flexibilität und volle Skriptbarkeit einfordert.

 

Die Grundidee ist eigentlich ganz einfach: Hält der Debugger an einem Breakpoint an, visualisiert die GUI den Anwendungsprozess, durch den der Breakpoint ausgelöst wurde. Interessiert man sich für einen anderen Anwendungsprozess, öffnet man die globale Taskliste von Trace32. Dort werden alle Tasks des Gesamtsystems gelistet. Mit einem Doppelklick kann man dann den Task auswählen, den man in der GUI angezeigt haben möchte. Die globale Taskliste bietet zudem die Möglichkeit, Programm-Breakpoints gezielt für einen Task zu setzen. Funktionen und Variablen können während des Debuggings mit Namen angesprochen werden.

Fachartikel