14.01.2015 Aufrufe

Dynamische Adaption in heterogenen verteilten eingebetteten ...

Dynamische Adaption in heterogenen verteilten eingebetteten ...

Dynamische Adaption in heterogenen verteilten eingebetteten ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

4.2 Modularisierung<br />

Informationen über C++ Programme zu speichern. In der Version 3 wurde diese Möglichkeit noch<br />

erweitert und auch Unterstützung für Java Programme <strong>in</strong>tegriert.<br />

Vergleich und Bewertung der Formate<br />

Alle vorgestellten Formate stellen die grundlegenden Informationen bereit, die zum Debuggen e<strong>in</strong>es<br />

Programms notwendig s<strong>in</strong>d. Für unser Ziel ist die Beschreibung der Funktionen und der Datentypen<br />

besonders wichtig. stabs und COFF beschreiben den Aufbau von zusammengesetzten Typen nur<br />

ungenau, da lediglich die Position der e<strong>in</strong>zelnen Elemente <strong>in</strong>nerhalb des Typs angegeben ist, nicht<br />

jedoch ihre Größe. Es gibt Erweiterungen beider Formate, die diesen Schwachpunkt ausgleichen, diese<br />

werden jedoch nicht allgeme<strong>in</strong> verwendet und s<strong>in</strong>d somit spezifisch für e<strong>in</strong>en Compiler.<br />

In Microsofts Debug<strong>in</strong>formationen s<strong>in</strong>d die gewünschten Informationen vorhanden. Die unzureichende<br />

Dokumentation der neueren Formate und die E<strong>in</strong>schränkung auf die W<strong>in</strong>dows-Plattformen<br />

schränken die Nutzung dieses Formats jedoch stark e<strong>in</strong>.<br />

Wir konzentrieren uns daher im Folgenden auf das DWARF-Format. Es enthält ebenfalls alle benötigten<br />

Daten und ist durch die Spezifikation ausführlich beschrieben. Darüber h<strong>in</strong>aus handelt es<br />

sich um e<strong>in</strong> modernes Format mit Unterstützung für Compiler-Optimierungen, wie beispielsweise das<br />

E<strong>in</strong>betten e<strong>in</strong>er Funktion <strong>in</strong> e<strong>in</strong>e andere (Inl<strong>in</strong>ig) und objektorientierter Sprachen.<br />

4.2.6.2 Verbesserung der Modulerzeugung durch Debug<strong>in</strong>formationen<br />

In Abschnitt 4.2.5 wurde dargestellt, wie Module aus den Sektionen e<strong>in</strong>er Objektdatei erstellt werden.<br />

Dabei wurde auch auf die Problematik h<strong>in</strong>gewiesen, dass die normalen Symbol<strong>in</strong>formationen nicht<br />

immer genügend Informationen enthalten, um die Elemente zu identifizieren. Debug<strong>in</strong>formationen<br />

können hier zusätzliche Informationen liefern. Bei entsprechend detaillierten Debug<strong>in</strong>formationen<br />

s<strong>in</strong>d die Positionen und Größen aller Funktionen und Datenstrukturen gegeben. Diese Informationen<br />

können dazu genutzt werden, um vorhandene Symbole zu vervollständigen oder um neue Symbole für<br />

Datenstrukturen und lokale Funktionen zu erstellen, für die ke<strong>in</strong>e Symbol<strong>in</strong>formationen vorhanden<br />

s<strong>in</strong>d.<br />

Darüber h<strong>in</strong>aus bieten e<strong>in</strong>ige Debug<strong>in</strong>formationsformate die Möglichkeit, e<strong>in</strong>gebettete Funktionen<br />

zu erkennen. Falls e<strong>in</strong>e Funktion nur e<strong>in</strong>gebettet existiert, so wird sie komplett der umgebenden<br />

Funktion zugeschrieben und wird nicht durch e<strong>in</strong> Modul repräsentiert. Existiert die Funktion jedoch<br />

zusätzlich als normale Funktion, so wird e<strong>in</strong> unveränderlicher Verweis zwischen der Funktion und allen<br />

Funktionen, <strong>in</strong> die sie e<strong>in</strong>gebettet ist, <strong>in</strong> den Moduldaten vermerkt. Anhand dessen kann das System<br />

nachvollziehen, dass Veränderungen an der e<strong>in</strong>gebetteten Funktion zu Änderungen an den umgebenden<br />

Funktion führen muss.<br />

4.2.6.3 Debug<strong>in</strong>formationen zur Datentypbestimmung<br />

Debug<strong>in</strong>formationen können dazu genutzt werden, den Datentyp e<strong>in</strong>es Datenmoduls festzustellen.<br />

S<strong>in</strong>d e<strong>in</strong>zelne Datenstrukturen als Modul identifiziert, so ist es möglich, mithilfe ihrer Position e<strong>in</strong>en<br />

entsprechenden E<strong>in</strong>trag <strong>in</strong> den Debug<strong>in</strong>formationen zu suchen. Die dar<strong>in</strong> enthaltenen Typ<strong>in</strong>formationen<br />

s<strong>in</strong>d dann dem Modul zu zuordnen.<br />

Der Datentyp wird bei entfernten Operationen benötigt, bei denen e<strong>in</strong> Datenmodul auf e<strong>in</strong>en anderen<br />

Knoten verschoben oder kopiert wird. Wenn man beispielsweise e<strong>in</strong> Funktionsmodul auf e<strong>in</strong>en anderen<br />

Knoten auslagert, so werden dort die abhängigen Datenmodule benötigt. Um sie ordnungsgemäß<br />

zu übertragen, müssen der Typ und die Struktur der Daten bekannt se<strong>in</strong>. Handelt es sich bei dem<br />

59

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!