-
Die
vorliegende Erfindung bezieht sich auf Emulations-Software, beispielsweise
für die
Verwendung bei Software-Entwicklungstools
und dynamischen Instrumentierungs-, Emulations-, Profilier- und Überwachungstools,
die die Entwicklung und Wartung von Computersoftware unterstützen.
-
Das
Entwickeln und Warten von Computersoftware wurde seit langem als
eine schwierige und fehleranfällige
Technologie erkannt. Entwickler von Anwendungssoftware und Softwareintegrierer
haben nach Kompilierer-Technologietools gesucht, die Instrumentierungsfähigkeiten
liefern, um ihre Software zu optimieren. Probleme, wie z. B. Bestimmen,
wann Speicherarraygrenzenbedingungen überschritten wurden oder wenn
ein Speicher in den C und C++-Programmierspeichern nicht initialisiert
ist, bestehen weiterhin und der Bedarf für Verbesserungen bei Softwareprogramm-Überwachungstools
ist weit verbreitet.
-
Ein
Problem mit herkömmlichen
Software-Entwicklungstools ist, dass solche Tools einen statischen Prozess
zum Hinzufügen
von Instrumentierungs- und Überwachungscodebefehlen
verwenden. Die Verwendung eines statischen Prozesses änderte die
Ausführung
des Objektmoduls von der Art und Weise, wie das Objektmodul ursprünglich ausgeführt worden
wäre, auf
einen neuen Ausführungsfluss.
Andere Prozesse, die durch statische Instrumentierungs- oder Überwachungstools
verwendet wurden, haben den ursprünglichen Objektcode des Benutzers
erweitert durch Hinzufügen
von Schritten zu dem Softwareladeprozess durch Verfahren, wie z.
B. die Einfügung
einer Instrumentierung durch ein Fehlersuchprogramm (Debugger),
oder von Softwarereparaturen durch Hinzufügen von korrigiertem Code.
Der zusätzliche
Instrumentierungs- und Überwachungscode
ermöglicht
es dem Programm, das ausgeführt
wird, Dinge zu verfolgen, wie z. B. Speichergrenzbedingungen, Cachesimulationen
und Softwareprogrammfluss.
-
Eine
Softwareanalyse für
Zwecke wie z. B. Codeprofilieren, wird manchmal als Codefehlerbeseitigung bezeichnet.
Der korrigierte Code wird für
Zwecke, wie z. B. das Einfügen
von Softwarewartungsänderungen
in Objektcodemodule, verwendet. Da der ursprüngliche Laderprozess erweitert
wird, um ein Fehlersuchprogramm oder ein Codekorrekturmerkmal zu
umfassen, kann das ausführbare
Speicherbild den Instrumentierungscode enthalten, der während dem
erweiterten Ladeprozess hinzugefügt
wurde.
-
Bei
den herkömmlichen
Typen von Software-Entwicklungstools, wie z. B. Computerinstrumentierungs- und
-überwachungstools,
tritt die Übersetzung
des ursprünglichen
Codes entweder an dem ursprünglichen Medienbild
oder an dem Punkt auf, an dem der Lader aufgerufen wird. Nach der
Computerinstrumentierung und -überwachung
gibt es kein ausführbares
Bild des ursprünglichen
Codes des Benutzers mehr. Daher begrenzte der Stand der Technik
die Art, wie Software-Entwicklungstools
verwendet wurden, durch Ändern
des ausführbaren
Bildes des Benutzers mit eingefügtem
Instrumentierungs- oder Überwachungscode
und erforderte dadurch, dass der Programmzähler sowohl die ursprünglichen
Codebefehle des Benutzers als auch die eingefügten Instrumentierungs- oder Überwachungscodebefehle
durchläuft.
-
Alle
diese Techniken für
die Verwendung von statischen Software-Entwicklungstools, die in
der Vergangenheit bestanden, haben Probleme, die ihre Effizienz
beschränkten.
Beispielsweise erfordern statische Instrumentierungs- oder Überwachungstools
eine spezielle Verbindung. Da außerdem der Typ und der Umfang
von Instrumentierungsbedürfnissen
abhängig
von dem speziellen Programmverhalten bei der Ausführung variieren
kann, müsste
der Benutzer, um ein statisches Instrumentierungs- oder Überwachungstool
effektiv zu nutzen, regelmäßig anhalten
und den Zustand des optimierten Codes betrachten, wobei durch Verwenden
einer Reihe von Codeschnappschüssen
eine Historie erstellt wird. Dies sind zeitaufwendige Aktivitäten.
-
Außerdem umfasst
das statische instrumentierte Objektcodemodul keine Laufzeitinformationen
und folglich fügt
der Instrumentierungs- oder Überwachungscode
Befehle für
alle Wege des Softwarecodes ein, obwohl viele Pfade nicht zu einem
Teil des tatsächlichen
Ausführungsprozesses
werden. Die mangelnde Kenntnis des tatsächlichen Ausführungspfads
des Objektcodemoduls des Benutzers behindert zusätzlich die Fähigkeit
des Programmierers, die Software-Entwicklungstools
der Vergangenheit mit dynamisch ladbaren Bibliotheken zu verwenden,
wie z. B. der dll-Bibliothek der C-Sprache. Der Benutzer müsste bei
der Kompilierzeit spekulieren, welche dynamische ladbaren Bibliotheken
während
der Ausführung
des Benutzercodes aufgenommen würden,
und dies kann zu unnötiger
Codeerzeugung führen.
-
Das
U.S.-Patent Nr. 5,680,584 offenbart ein Simulatorsystem für Codeausführung und
Fehlerbeseitigung in einer Mehrfach-Architekturumgebung. Ein System wird
betrieben, um zwei Codes, einen X-Code und einen Y-Code zu verarbeiten
und auszuführen.
Der Y-Code umfasst programmierte Befehle, die entworfen sind, um
an einer Maschine ausgeführt
zu werden, deren Architektur durch die X-Prozesse simuliert wird.
-
Aus
dem Vorhergehenden ist offensichtlich, dass es nach wie vor einen
Bedarf gibt, Software-Entwicklungstools zu erzeugen, die den ursprünglichen
Ausführungsfluss
des Benutzercodes beibehalten. Dieser Bedarf besteht, weil bestehende
Software-Entwicklungstools keine Laufzeitinformationen umfassen
und daher Effizienzen in Bezug auf das Einfügen einer Instrumentierung,
die sich auf den tatsächlichen
Benutzercode-Ausführungspfad
konzentriert, nicht erreicht werden können. Außerdem können bei herkömmlichen
dynamischen Werkzeugen die Laufzeitoptionen, die durch den Benutzer
ausgewählt
werden, nicht zu dem instrumentierten Code übertragen werden. Dies führt zu einer
weniger effizienten Einrichtung eines Instrumentierungscodes. In
jüngster
Zeit wurden einige dynamische Tools entwickelt, die den Überwa chungscode ändern, aber
trotzdem diese Probleme nicht lösen.
-
Diese
und andere Probleme mit den herkömmlichen
statischen und dynamischen Software-Entwicklungstools haben zu Beschränkungen
bei der Weiterentwicklung von Software-Entwicklungstechniken geführt.
-
Die
vorliegende Erfindung schafft ein verbessertes Software-Entwicklungstool.
-
Gemäß einem
Aspekt der vorliegenden Erfindung ist ein Verfahren zum Emulieren
von Software gemäß Anspruch
1 vorgesehen.
-
Gemäß einem
weiteren Aspekt der vorliegenden Erfindung ist ein computerimplementiertes
Software-Entwicklungstool gemäß Anspruch
7 vorgesehen.
-
Gemäß einem
weiteren Aspekt der vorliegenden Erfindung ist ein Computerprodukt
gemäß Anspruch 8
vorgesehen.
-
Das
bevorzugte Ausführungsbeispiel
liefert ein Software-Entwicklungstool,
das eine Form einer dynamischen Instrumentierung oder Überwachung
ist und in der gleichen Umgebung ausgeführt wird wie das eines instrumentierten
oder überwachten
Benutzerprozesses. Dies kann eine Umgebung erzeugen, die es ermöglicht,
dass eine dynamische Instrumentierung oder Überwachung bei Laufzeit eingeführt wird,
und daher die maximale Menge an Informationen über die Ausführung eines
Benutzerprozesses ausnutzt. Beispielsweise kann das bevorzugte Tool
den Bedarf an Neukompilierung oder Neuverbindung durch Software-Entwickler
vermindern, da die Instrumentierungs- oder Überwachungsänderungen bei der Laufzeit
auftreten. Da das Tool vorzugsweise außerdem unter der Benutzerprozessumgebung
ausgeführt
wird, behält
es den Ausführungsfluss
des Benutzercodes bei.
-
Emulation
ist der Prozess des Einsetzens von Maschinenbefehlen für die ursprünglichen
Maschinenbefehle des Benutzers. Der Emulationsprozess führt die äquivalenten
Operationen durch, die der Benutzer durchgeführt hätte, und umfasst auch die gewünschten
Instrumentierungsoperationen.
-
Statische
Software-Entwicklungstools können
auch Unterstützung
zum Verfolgen der Befehlsausführung
eines Programms liefern. Beispielsweise könnte Code geschrieben werden,
um die Prozessspeicherspur für
die Erfassung eines nicht-initialisierten
Codezugriffs zu testen. Ferner könnte
ein Zugriff auf Speicherreferenzpuffer erzeugt werden, und speicherempfindliche
Prozeduren, wie z. B. Malloc, die die Speicherzuweisung in einer
C-Sprachen-Bibliotheksumgebung unterstützt, könnten über Instrumentierung ersetzt
werden. Das Ersetzen kann aus dem Austauschen von Maschinenbefehlen
oder dem Hinzufügen
von Maschinenbefehlen bestehen. Daher kann das statische Tool Speicherpuffer-Zugriffssystemaufrufe
vor deren Ausführung
erfassen und deren Verhalten aufzeichnen. Code könnte hinzugefügt werden,
um die Ergebnisse dieser Instrumentierung anzuzeigen.
-
Bei
einem Ausführungsbeispiel
ist ein Software-Entwicklungstool
vorgesehen, das ein ursprüngliches plattenbasiertes
Bild von Benutzercode verwendet, das durch den Computersystemlader,
einen Urladungslader und einen Zustandswertlader erweitert wird.
Dasselbe kann auch Hilfssteuercode verwenden, der die Benutzerprozessbefehle
durch Ausführen äquivalenter
Befehle emuliert, und die emulierten Benutzerprozessbefehle durch
Hinzufügen
von Befehlen instrumentiert. Dasselbe kann eine Prozesssteuerung
verwenden, die das Software-Entwicklungstool und den Benutzerprozess
in dem Computerspeicher verwaltet und kann die Ausführung des
Benutzerprozesses anhalten und wieder aufnehmen.
-
Der
Hilfssteuercode kann ein Objektcodemodul sein, das an dem Benutzerprozess
angehängt
ist, wenn das Tool ausgeführt
wird, das Computersystemumgebungsinformationen in dem Speicher beibehält und das
gemäß dem Steuerfluss
des ausführbaren
Benutzercodes ausgeführt
wird. Die Kopie des Zustands des ausführenden Programms in dem Speicher
umfasst unter anderem den Maschinenzustand von Registern, Bedingungscodes
und hardware-spezifische Parameter. Die bevorzugten Ausführungsbeispiele
können
einen Speicherzustandslader verwenden, um Programmausführungszustandsinformationen,
die durch den Urladungscode und den Hilfssteuercode verwendet werden
können,
in eine temporäre
Position zu laden und später
neu zu laden.
-
Bei
dem bevorzugten Ausführungsbeispiel
werden die instrumentierten oder überwachten Befehle in dem gleichen
Speicherplatz ausgeführt,
der für
den Benutzerprozess zugewiesen war, und verwenden den ursprünglichen
Code als Anweisungen in der Form von Daten, um die instrumentierten
Befehle durch den gleichen Ausführungsfluss
zu leiten wie bei dem ursprünglichen
Benutzerprozess. Daher ist dieses Ausführungsbeispiel nicht auf die
Art und Weise begrenzt, wie herkömmliche
Tools durch die Praxis des Änderns
des ausführbaren
Bildes des Benutzers mit eingefügtem
Instrumentierungs- oder Überwachungscode
begrenzt waren, die erforderte, dass der Programmzähler sowohl
die ursprünglichen
Codebefehle des Benutzers als auch die eingefügten Instrumentierungs- oder Überwachungscodebefehle
durchläuft.
-
Der
Hilfssteuercode kann einen Emulator umfassen, der die Benutzerprozessbefehle
ersetzt und Computersystemumgebungsinformationen beibehält, die
der Benutzerprozess erzeugt hätte,
der bewirkt, dass der modifizierte Benutzerprozess die gleichen
Ergebnisse erzeugt als wenn das Emlationstool nicht aufgerufen worden
wäre, und
der den Benutzerprozesscode als Daten behandelt. Der Hilfssteuercode
kann einen Instrumentor umfassen, der innerhalb des Benutzerprozesses
ausgeführt
wird und Befehle hinzufügt,
die die Benutzerbefehle, für
Zwecke, wie z. B. Überwachen
oder Profilieren, vergrößern können. Schließlich kann
der Hilfssteuercode einen Exekutor umfassen, der bestimmt, ob der
Emulator oder der Instrumentor aufgerufen werden, durch Verwenden
der Befehle des Benutzerprozesses und Behandeln der Befehle als
Daten. Die Ersatzbefehle können äquivalent
zu den Befehlen des Benutzercodes sein, können aber zusätzliche
Prozessüberwachungs-
oder Instrumentierungscodebefehle umfassen. Der Hilfssteuercode
hängt von
der spezifischen Computerhardware und dem spezifischen Computerbetriebssystem
ab, auf dem derselbe ausgeführt
wird.
-
Die
bevorzugten Ausführungsbeispiele
können
verwendet werden, um die Erzeugung für eine Anzahl von wertvollen
Programmanalysetools für
Software-Entwicklung und -Wartung zu ermöglichen. Beispielsweise ist
die Speicherleckerfassung, für
Probleme mit Prozeduren, wie z. B. Malloc and Free, eine wichtige
Funktion, die es einem Benutzer ermöglicht, die Software-Entwicklungs-
und -Wartungseffizienz zu erhöhen.
Free ist ein Betriebssystembefehl, der die Aufhebung der Speicherzuordnung
unterstützt,
und in der C-Sprachen-Bibliotheksumgebung
enthalten ist. Die Programmanalysetools umfassen, sind aber nicht
beschränkt
auf, Software-Fehlersuchprogrammtools, Softwarespeicherleckerfassungstools,
Computerhardware-Cachesimulationstools, Softwareprofiliertools und
Software-Ausführungsabdeckungstools.
-
Ein
beispielhaftes Verfahren ist, dass der Benutzer Softwaretools für eine dynamische
Instrumentierung schreibt. Dies kann eine einfache Einfügung von
Instrumentierungscode während
dem Ausführungsprozess
ermöglichen,
die für
einen Fachmann auf diesem Gebiet gut bekannt sind, wie z. B. dynamisches
Verbinden. Die Einfügung
von Instrumentierungscode ermöglicht
das Abfangen von Systemunterstützungsanforderungen,
was ohne weiteres ein neues Verfolgen und eine neue Analyse des
Ausführungsflusses
von Softwarebefehlen ermöglicht,
und auch einen inkrementalen Ausführungsfluss ermöglicht.
Das bevorzugte Ausführungsbeispiel
ermöglicht
es dem Benutzer, eine Funktionalität zu erzeugen, wie z. B. Speicherprüfen und
Einfügen
von Überwachungspunkten
für eine
verfeinerte Analyse der Befehlsausführung. Überwachungspunkte sind Softwarebefehle,
die anzeigen, wenn sich ein spezifisches Datum in einem Benutzeranwendungs-Softwareprogramm ändert. Ein
Fachmann auf diesem Gebiet wird die Anwendung des dynamischen Verbindens von
Befehlen durch die Verwendung der beschriebenen Ausführungsbeispiele
erkennen.
-
Da
das System dynamisch sein kann, enthält der instrumentierte Objektcode
Informationen über
den tatsächlichen
Ausführungspfad,
wenn der erweiterte Lader aufgerufen wird. Da der Ausführungspfad
bekannt ist, muss der Instrumentierungs-, Profilier- oder Überwachungscode
nur auf die notwendigen dynamisch ladbaren Bibliotheken zugreifen,
wie z. B. die C-Programmiersprachenbibliothek dll.
-
Ein
Ausführungsbeispiel
der vorliegenden Erfindung ist nachfolgend beispielhaft mit Bezugnahme
auf die beiliegenden Zeichnungen beschrieben. Es zeigen:
-
1 ein Blockdiagramm des
Kompilierzeit- und Laufzeit-Computerausführungsprozesses;
-
2A bis 2D Blockdiagramme der Computerspeicherkonfiguration
während
der Ausführung;
-
3A bis 3C Blockdiagramme des modifizierten Benutzerprozesses
und der Prozesssteuerung;
-
4A ein Flussdiagramm des
Prozesses, der verwendet wird, um das Emulationstool in dem Benutzerprozess
einzufügen;
-
4B ein Blockdiagramm von
Datenstrukturen, die kombiniert werden, um den ausführbaren
Benutzerprozesscode zu bilden; und
-
4C ein Blockdiagramm der Änderungen
des Benutzerprozessspeichers während
der Ausführung.
-
Das
bevorzugte Ausführungsbeispiel,
das hierin beschrieben ist, ist in der Form eines Software-Entwicklungstools
für die
dynamische Instrumentierung oder Überwachung eines Benutzerprozesses
und wird unter der gleichen Computerumgebung ausgeführt wie
diejenige des Benutzerprozesses und behält dadurch den Fluss der Ausführung des
Benutzercodes bei. Herkömmliche
Software-Entwicklungstools haben eine Kopie des ausführbaren
Benutzerprozessbildes erzeugt, und des eingefügten Instrumentierungscodes
in dem Computerspeicher, was zu einem ausführbaren Bild geführt hat,
das den Ausführungsfluss
des ursprünglichen
Benutzerobjektmoduls nicht beibehalten hat.
-
Dieses
Ausführungsbeispiel
ist ein dynamisches Software-Entwicklungstool,
das an der Laufzeitstufe der Kompilierung und Ausführung eines
Softwareprogramms eingeführt
wird.
-
Dasselbe
emuliert Softwarebefehle durch Erkennen von Befehlen, die geändert werden
müssen,
um nach Bedarf ausgeführt
zu werden, und durch Ersetzen derselben mit äquivalenten Befehlen, die ohne
weiteres erweitert werden können
mit Instrumentierungs- oder Überwachungsbefehlen
zum Verbessern des Software-Entwicklungsprozesses. Dasselbe kann
die Ausführung
eines Benutzerprozesses anhalten und wieder aufnehmen, und dadurch
Instrumentierungs- oder Überwachungscode
in den Benutzerprozess einfügen. Während der
Laufzeitstufe wird ein Computermaschinencode erzeugt, der unter
Verwendung der Hardwareregister ausgeführt wird. Dieses Ausführungsbeispiel
kann eine Software-Entwicklungsanalyse
verbessern durch dynamisches Instrumentieren oder Überwachen
des Benutzerprozesses in der Benutzerprozesscomputerumgebung und
unter dem Benutzerprozessausführungsfluss.
-
Das
bevorzugte Ausführungsbeispiel
arbeitet in einem Computerspeicher, der zusätzlich zu dem dynamischen Ausführungsverfahren
eine schnellere Emulation als bei dem Stand der Technik ermöglicht.
-
Außerdem kann
das beschriebene Ausführungsbeispiel
durch Behandeln der Benutzerprozessbefehle als Daten eine Vielzahl
von Codesequenzen flexibel emulieren. Herkömmliche Emulationswerkzeuge
waren darauf beschränkt,
an einzelnen Codeeinheiten, wie z. B. Software-Prozeduren, zu arbeiten.
Ein Fachmann auf diesem Gebiet wird erkennen, dass das Emulationstool
Prozedurgrenzen überqueren
kann, während
es Sequenzen von Benutzerprozesscode ausführt, da das beschriebene Ausführungsbeispiel
unter den Benutzerprozessbefehlen arbeitet und Benutzerprozessbefehle
als Daten behandelt.
-
Das
Software-Entwicklungstool ist eine Form einer Computersystem-Kompiliertechnologie.
Für eine allgemeine
Erörterung
bestehender Kompilier- und Emulationstooltechnologie siehe Principles
of Compiler Design, von Alfred V. Aho und Jeffrey D. Ullman (Addison-Wesley,
1977).
-
Emulation
-
Eine
Emulation umfasst das Modellieren eines Computers in Software. Das
beschriebene Ausführungsbeispiel
emuliert den ursprünglichen
Anwendungscode durch Abrufen, Decodieren und Übersetzen von Abschnitten von
Code in Befehle zum Modellieren der ursprünglichen Computerumgebung in
Software. Während
der Ausführung
auf einigen Betriebssystemen, wie z. B. UnixTM,
kann ein Prozess einen neuen Prozess hervorbringen, der die Steuerung
des Ausführungsflusses übernehmen
kann und daher kann es sein, dass der ursprüngliche Prozess die Ausführung nicht
mehr steuert. Der Systemaufruf und die Signalbefehle sind Befehle,
die einen neuen Prozess hervorbringen können. Das System kann Systemaufrufe
und Signale abfangen und dieselben nach Bedarf übersetzen, um den emulierten
Ausführungsfluss
in dem ursprünglichen
Benutzerprozess beizubehalten.
-
Während der
herkömmlichen
Ausführung
wird durch den Benutzerprozess auf die echten Hardware-Registerpositionen
zugegriffen. Beispielsweise kann das Hinzufügen von 2 + 3 und das Speichern
des Ergebnisses in einer herkömmlichen
Hardware-Registerdatei durch „ADDr7,
r8, r31" dargestellt
werden. Diese Darstellung wäre
genau, falls das Register 7 den Wert „2" enthielt, und das Register 8 den Wert „3" enthielt, und falls
die Gesamtzahl „5" in dem Register
31 gespeichert würde.
Die herkömmliche
Hardware-Registerdatei würde
das folgende Ergebnis der „ADD"-Operation enthalten.
-
-
Eine
Emulations-Registerdatei für
einen Computer mit zweiunddreißig
Hardware-Registern kann durch eine Erklärung einer Arraydatenstruktur „reg[32]" dargestellt werden.
Hier enthält
das Array „reg" zweiunddreißig lange
Ganzzahlwerte. Das „cpu"-Programm stellt
eine Emulationsregisterdatei dar. Angenommen, dass cpu.reg[7] 2
enthält,
und cpu.reg[8] 3 enthält,
werden die Befehle „load", „load", „add" und „store" die Werte von cpu.reg[7]
und cpu.reg[8] laden, deren Werte addieren und die Summe in cpu.reg[31]
speichern. Eine beispielhafte „cpu"-Emulationsregisterdatei
folgt.
-
-
Das
System kann in einem Computer als ein Software-Entwicklungstool für Emulation implementiert werden,
das Befehle in einem Benutzerprozess ersetzt und in dem Speicher
bei Laufzeit ausgeführt
wird. Der Speicher kann Computerumgebungszustandswerte beibehalten,
die die Inhalte der Hardwareregister, Bedingungscodes zum Anweisen
von Ausführungsstufen
und hardwarespezifische Parameter zum Anweisen des Ausführungsprozesses
umfassen.
-
Das
System kann auch arbeiten, bevor der Benutzerprozess mit der Ausführung begonnen
hat. Wenn die Ausführung
der vorliegenden Erfindung der Benutzerprozessausführung vorangeht,
lädt der
Zustandswertlader Anfangszustandsregisterwerte für den Urladungslader in den
Computerspeicher, anstatt die aktuellen Zustandsregisterwerte zu
laden. Der Zustandswertlader behält
die Anfangszustandsregisterwerte für den Urladungslader bei, um
dieselben später
in einen Speicher des Benutzerprozesses neu zu laden.
-
Ein
alternatives Ausführungsbeisiel
der vorliegenden Erfindung für
die Verwendung, wenn der Benutzerprozess mit der Ausführung begonnen
hat, kann das Aufnehmen des Urladungsladers und des Urladungs-Softwarecodes
in dem Compu tersystem-Betriebssystemlader umfassen. Da der Computersystem-Betriebssystemlader
die anfänglichen
Benutzerprozesszustandswerte für
sowohl für
die Hardware-Register als auch den Computerspeicher einstellt, ist
es für
einen Fachmann auf diesem Gebiet klar, dass eine spezifische Computerimplementierung
integriert werden könnte,
um die Urladungsfunktionen durchzuführen.
-
Dynamische
Software-Entwicklungstools
-
Computersoftware-Entwicklungstools
wurden bei Anwendungen verwendet, die rückkopplungsgerichtete Optimierung
umfassen, unter Verwendung von dynamischer oder statischer Neukompilierung,
Hardwaresimulatoren und Softwarefehlerbeseitigung. Eine rückkopplungsgerichtete
Optimierung ist der Prozess, durch den Informationen über kritische
Ausführungspfade
in einem Softwareprogramm an ein Computerinstrumentierungs-, Profilier-
oder Überwachungstool
geliefert werden, für
die Verwendung bei weiteren Instrumentierungstechniken durch das
Tool. Die rückkopplungsgerichteten
Informationen können über eine
dynamische oder statische Neukompilierung des Benutzercodes in den
Optimierungsprozess eingebaut werden. Das heißt, der Instrumentierungscode
kann auf eine inkrementale Weise neu erzeugt und neu ausgeführt werden,
mit entsprechenden Änderungen
zum Optimieren der Ausführung
des Objektcodemoduls. Die Neuerzeugung basiert auf den Ergebnissen
der vorhergehenden Iteration. Bei dem beschriebenen Ausführungsbeispiel
wird das Profilieren oder Überwachen
des instrumentierten Codes dynamisch durchgeführt, d. h., während das
Programm inkremental ausgeführt
wird und keine spezielle Neukompilierung und Neuverbindung erfordert.
-
Die
Softwarefehlerbeseitigung wird durch den Prozess des Einfügens eines
spezifischen Instrumentierungs- oder Überwachungscodes aktiviert,
der Informationen protokolliert, die sinnvoll sind bei der Software-Entwicklungsanalyse
für spezifische
Computerbefehle, von denen bekannt ist, dass dieselben für Softwareprogrammierfehler
anfällig
sind. Prozeduren, die die Verwendung von Computerspeicher manipulieren,
können
unbeabsichtigt Speicherpositionen verändern, die durch andere Befehle
verwendet werden, und dadurch die Grenzbedingungen von zugewiesenen
Speicherpositionen überschreiten.
Daher sind Prozeduren, die die Verwendung von Computerspeicher manipulieren,
wie z. B. Mallok oder Free, gute Kandidaten für eine spezielle Softwarefehlerbeseitigungsüberwachung.
-
Hardwaresimulierung
ist der Prozess, durch den das Softwareprogramm mit einem Instrumentierungs- oder Überwachungstoolcode
neu-kompiliert wird, zum Erzeugen eines Objektmoduls des Benutzercodes,
das gemäß Computermaschinenbefehlen
oder Merkmalen einer anderen Computerumgebung als der, in der der Code
ursprünglich
entwickelt wurde, ausgeführt
wird. Die andere Computerumgebung ist typischerweise eine, die im
wesentlichen ähnlich
ist wie die ursprüngliche
Computerumgebung. Der Prozess des Erzeugens von Objektcode, der
darauf abzielt, auf einem anderen Computer zu laufen, ermöglicht die
Simulation der Ausführung
auf anderen Hardwareplattformen. Das heißt, die computerspezifischen
Hardwaremerkmale werden in dem Instrumentierungs- oder Überwachungstoolcode erzeugt
und in den Anwendungscode des Benutzers eingefügt. Bei dem bevorzugten Ausführungsbeispiel
der vorliegenden Erfindung ändert
der Instrumentor während
der Hardwaresimulation Befehle, die durch den Emulator erzeugt werden.
Der erweiterte Benutzerprozess wird dann ausgeführt zum Zweck des Analysierens
des Flusses von Benutzeranwendungsbefehlen auf der ursprünglichen
Maschine auf eine Weise, wie dieselbe in einer anderen Computerumgebung
ausgeführt werden
würde.
-
Einige
Beispiele von Hardwaresimulationsmerkmalen umfassen, sind aber nicht
beschränkt
auf, die Analyse von Bus- und Speicherlatenzzeit und die Analyse
der Cache-Architektur, wie z. B. satzadressiert (set associative),
Direktabbil dung, mehrere Cache-Ebenen und Prozessorverbindungsvernetzung.
Ein Fachmann auf diesem Gebiet wird die Verwendung von Hardwaresimulation
für die
Analyse dieser Merkmale erkennen.
-
Bei 1 verwendet das Ausführungsbeispiel
der dargestellten Softwareumgebung ein Quellprogramm 112,
das in einer Computerprogrammiersprache, wie z. B. C oder C++, erzeugt
sein kann. Das Quellprogramm wird durch einen Kompilierer 114 manipuliert,
der Programmiersprachenbefehle in Maschinencodebefehle übersetzt.
Die resultierenden Maschinencodebefehle werden häufig als Objektcode bezeichnet
und sind hierin durch Benutzerprozessobjektcode 113 dargestellt.
Der Objektcode umfasst Befehle zum Ausführen auf einem spezifischen
Computerprozessor. Daher ist der Benutzerprozessobjektcode 113 in
einem Format, das durch einen Verbinder 116 übersetzt
werden kann. Um den Objektcode auszuführen, muss derselbe mit ein
oder mehreren Objektcodemodulen kombiniert werden, um einen ausführbaren
Maschinencode zu erzeugen, und ist hierin durch einen ausführbaren
Benutzerprozesscode 118 dargestellt. Dieser Kombinierprozess wird
als Verbinden bezeichnet. Wenn der Verbinder 116 den Objektcode
verarbeitet, löst
er alle Verbindungsreferenzen und erzeugt einen ausführbaren
Code.
-
In 1 ist ein Lader 120 gezeigt,
der den Ausführungsprozess
aufruft, der hierin in Schritt 122 dargestellt ist, durch
Verwenden des ausführbaren
Benutzerprozesscodes 118 und des ausführbaren Softwareentwicklungscodes 115.
Die Aktivität
des Laders 120 stellt den Übergang von dem Kompilierungsprozess
zu dem Laufzeitprozess dar. Bei einem Ausführungsbeispiel der vorliegenden
Erfindung kann während
der Laufzeit ein Test ausgeführt
werden, um zu bestimmen, ob ein Profilierwerkzeug aktiviert ist 124,
das Computermaschinenpegelinformationen verwendet, um den Quellprogrammausführungsweg
einzustellen. Bei einem anderen Ausführungsbeispiel der vorliegenden
Erfindung kann ein Test ausgeführt
werden, um zu bestimmen, ob ein Prozessüberwachungs tool aktiviert ist 126,
das Benutzerebeneninformationen verwendet, um die Programmausführung zu überwachen.
Falls das Profiliertool aktiviert ist 124, werden die Maschinenebenenergebnisse
der Ausführung
für eine
spätere
Verarbeitung 129 protokolliert, und wie es in Schritt 128 dargestellt
ist, wird die Ausführung
inkremental fortschreiten. Falls das Prozessüberwachungstool aktiviert ist 126,
werden die Benutzerebenenergebnisse der Ausführung für eine spätere Verarbeitung 127 protokolliert,
und wie es in Schritt 128 dargestellt ist, wird die Ausführung inkremental
fortschreiten. Der inkrementale Ausführungsprozess 128 umfasst
das Nehmen von Rückkopplungsinformationen
von den protokollierten Ergebnissen des Profiliertools und des Verarbeitungsüberwachungstools.
Falls keines der Tools aktiviert ist, wird die Verarbeitung des
Quellenprogramms normal fortschreiten 128, um durch das
Computersystem ausgeführt
zu werden.
-
In 2A–2D ist
die ändernde
Computerspeicherkonfiguration dargestellt. In 2A stellen der Benutzerprozessanfangsblock 200,
die Benutzerprozessbefehle 202, die Benutzerprozessdaten 204 und
der verbleibende freie Raum 206 vor dem Aufrufen des Emulationstools
eine Benutzerprozessspeicherkonfiguration dar. In 2B wurde der Urladungslader 208 aufgerufen,
und hat einen Teil des freien Platzes 206 besetzt. Der
Benutzerprozessanfangsblock 200, die Benutzerprozessbefehle 202 und
die Benutzerprozessdaten 204 verwenden den Speicher eines
Benutzerprozesses 300 gemeinschaftlich mit dem Urladungslader 208.
Nachdem der Urladungslader 208 mit der Ausführung beginnt,
wird der Urladungssoftwarecode 210 aufgerufen, wie es in 2C gezeigt ist. Der Benutzerprozessanfangsblock 200,
die Benutzerprozessbefehle 202 und die Benutzerprozessdaten 204 verwenden
weiterhin einen Speicher des Benutzerprozesses 300 gemeinschaftlich, nun
mit dem Urladungssoftwarecode 210. Der Urladungssoftwarecode 210 hat
einen Teil des Speichers des verbleibenden freien Platzes 206 übernommen,
um den Hilfssteuercode 212 zu laden.
-
Schließlich wurde
in 2D der Hilfssteuerecode 212 aufgerufen.
Der Hilfssteuercode 212 umfasst einen Exekutor 214,
einen Emulator 216 und einen Instrumentor 218.
Der Emulator 216 behält
die Registerzustandswerte bei, die der Benutzerprozess ohne das
Aufrufen des Software-Entwicklungstools erzeugt haben würde. Der
Emulator 216 ersetzt auch die Befehle des Benutzerprozesses 300,
während
er die gleichen Ergebnisse erzielt, die ohne den Aufruf des Software-Entwicklungstools
aufgetreten wären,
und behandelt den Benutzerprozesscode als Daten. Der Instrumentor 218 wird
in den Benutzerprozess 300 ausgeführt und fügt Befehle hinzu, die die Benutzerbefehle
für Zwecke,
wie z. B. Überwachen
oder Profilieren, erweitern können. Schließlich bestimmt
der Exekutor 214 unter Verwendung der Befehle des Benutzerprozesses 202 und
der Benutzerprozessdaten 204, die beide als Daten behandelt
werden, ob der Emulator 216 oder der Instrumentor 218 aufgerufen
werden soll. Der Hilfssteuercode 212 und seine Elemente
arbeiten durch Verwenden des Benutzerprozessanfangsblocks 200.
Der Hilfssteuercode 212 und seine Elemente haben mehr als
den verbleibenden freien Platz 206 übernommen.
-
Das
System kann auch einen Zustandswertlader umfassen, der Zustandsregisterwerte
für den
Benutzerprozess in den Computerspeicher lädt und die Zustandsregisterwerte
für den
Benutzerprozess für
späteres Neuladen
in den Speicher des Benutzerprozesses beibehält. Wenn der Benutzerprozess
für die
Ausführung aufgerufen
wird, lädt
der Zustandswertlader zusätzlich
Zustandsregisterwerte für
den Lader in den Computerspeicher und behält die Zustandsregisterwerte
für den
Lader für
späteres
Neuladen in den Speicher des Benutzerprozesses bei.
-
Bei 3A–3C sind
die Inhalte des Benutzerprozesses während der Ausführung dargestellt.
In 3A stellt die Prozesssteuerung 302 die
Steuerung über
den Benutzerprozess 300 her, durch Anhalten der Ausführung des
Benutzerprozes ses 300. Der Zustandswertlader lädt die Zustandsregisterwerte
für den
Benutzerprozess in den Computerspeicher. Die Prozesssteuerung 302 ruft
dann den Urladungslader 208 auf, und der Zustandswertlader
lädt die
Urladungsladerzustandswerte 304 neu in den Speicher des
Benutzerprozesses 300. Wenn der Urladungslader 208 und
die Urladungsladerwerte 304 in den Benutzerprozess 300 in 3A eingefügt werden,
verwenden sie den Benutzerprozess 300 gemeinschaftlich
mit dem ausführbaren
Benutzerprozesscode und Daten 308. In 3B lädt
der aufgerufene Urladungslader 208 den Urladungssoftwarecode 210 in
den Speicher des Benutzerprozesses 300 und verwendet die
Urladungsladerzustandswerte 304 zum Ausführen des
Urladungssoftwarecodes 210. Die Prozesssteuerung 302 und
der ausführbare
Benutzerprozesscode und Daten 308 werden weiterhin in dem
Benutzerprozess 300 ausgeführt.
-
Bei
dem Übergang
von 3B zu 3C lädt der Zustandswertlader die
Zustandsregisterwerte des Benutzerprozesses 310 neu in
den Speicher des Benutzerprozesses 300. Daraufhin gibt
die Prozesssteuerung 302 die Steuerung des Benutzerprozesses 300 frei
und die Ausführung
in dem Benutzerprozess 300 wird wieder aufgenommen. Der
Urladungssoftwarecode 210 wird in dem Benutzerprozess 300 ausgeführt und hängt den
Hilfssteuercode 212 an den Benutzerprozess 300 an.
Der ausführende
Urladungssoftwarecode 210 in dem Benutzerprozess 300 überträgt die Ausführung zu
dem Hilfssteuercode 212 in dem Benutzerprozess 300.
-
In 3C ersetzt der Hilfssteuercode 212 Befehle
in dem Benutzerprozess unter Verwendung der Zustandswerte 310 in
dem Speicher des Benutzerprozesses 300. Die Elemente des
Hilfssteuercodes 212 umfassen den Exekutor 214,
den Emulator 216 und den Instrumentor 218. Der
Hilfssteuercode 212 umfasst einen Emulator 216,
der die Registerzustandswerte beibehält, die der Benutzerprozess 300 ohne
das Einfügen
des Software-Entwicklungstools erzeugt hätte. Der Emulator 216 führt auch
ersetzte Befehle aus unter Verwendung des Benutzerprozesscodes und
der Daten 308, die als Daten behandelt werden, um die gleichen
Ergebnisse zu erzeugen, als ob das Software-Entwicklungstool nicht
eingefügt
worden wäre.
Der Hilfssteuercode 212 kann auch einen Instrumentor 218 umfassen,
der in dem Benutzerprozess 300 ausgeführt wird, und Befehle hinzufügt, die
dem Benutzer Befehle für
Zwecke, wie z. B. Überwachen
oder Profilieren, vergrößern können. Schließlich kann
der Hilfssteuercode 212 einen Exekutor 214 umfassen,
der bestimmt, ob der Emulator 216 oder der Instrumentor 218 aufgerufen
werden, unter Verwendung der Befehle des Benutzerprozesses 308,
die als Daten behandelt werden. Der Hilfssteuercode 211 wird
mit den neugeladenen Zustandswerten des Benutzerprozesses 310 ausgeführt und
verwendet den ausführbaren
Benutzerprozesscode und Daten 308 als Daten.
-
Bei 4A umfasst der Prozess,
der durch das Emulationstool verwendet wird, bei Schritt 400 das Beginnen
des Benutzerprozesses 300 und bei Schritt 402 das
Aufrufen des Emulationstools. Bei Schritt 404 hält die Prozesssteuerung 302 den
Benutzerprozess 300 an, was die Aktion von dem Emulationstool
einleitet. Bei Schritt 406 erfasst der Zustandswertlader
den Maschinenzustand der Registerwerte für den Benutzerprozess 300 und
für späteres Neuladen
in den Speicher des Benutzerprozesses 300. Nachdem die
Steuerung des Benutzerprozesses 300 durch Anhalten des
Benutzerprozesses 300 übernommen
wurde, ruft die Prozesssteuerung 302 nun bei Schritt 408 den
Urladungslader 208 auf, und der Zustandswertlader lädt die Urladungsladerzustandswerte 304.
Bei Schritt 410 lädt
der Urladungslader 208 dann einen Urladungssoftwarecode 210 in
ungenutzte Abschnitte des Speichers des Benutzerprozesses 300.
Bei Schritt 412 lädt
der Zustandswertlader 310 die Zustandswerte des Benutzerprozesses 300 neu
in den Speicher des Benutzerprozesses 300. Bei Schritt 414 gibt
die Prozesssteuerung 302 die Steuerung des Benutzerprozesses 300 frei.
Der Urladungssoftwarecode 210 wird in den Benutzerprozess
ausgeführt
und hängt
den Hilfssteuercode 212 an den Benutzerprozess 300 an.
Der ausführende
Urladungssoftwarecode 210 überträgt die Ausführung zu dem Hilfssteuercode 212 in
dem Benutzerprozess 300.
-
Der
freigegebene Benutzerprozess 300 nimmt nun die Ausführung wieder
auf und bei Schritt 416 modifiziert der Hilfssteuercode 212 den
Benutzerprozess 300, so dass der Benutzerprozess 300 die
Ausführung in
dem Hilfssteuercode 212 unter Verwendung des Benutzerprozesscodes
als Daten und der Benutzerprozesszustandswerte 310 fortsetzt.
Bei Schritt 418 umfasst das System Hilfssteuercode 212,
der Befehle in dem Benutzerprozess 300 ersetzt.
-
Der
Speicher des Benutzerprozesses 300 erfährt eine Veränderung
während
der Ausführung
des Emulationstools. In 4B sind
die Änderungen
bei dem Speicher des Benutzerprozesses 300 dargestellt.
Bei Schritt 426 wird der Urladungslader 208 in
den unbesetzten freien Raum 206 des Speichers des Benutzerprozesses 300 geladen.
Bei Schritt 428 wird der Urladungssoftwarecode 210 in
den unbesetzten freien Raum 206 des Speichers des Benutzerprozesses 300 geladen.
Bei Schritt 430 wird der Hilfssteuercode 212 in
den nicht-besetzten
freien Platz 206 des Speichers des Benutzerprozesses 300 geladen,
und die Benutzerprozesszustandswerte werden neu in den Benutzerprozess 300 geladen 310.
-
Die
Dateistrukturen in 4C stellen
dar, dass alle der Benutzerprozessobjektmodule 420 mit
den Hilfssteuercodeobjektmodulen 422 kombiniert sind, um
ein kombiniertes ausführbares
Benutzerprozesscodebild 424 zu erzeugen. Die Computerdateien
werden in dem Speicher ausgeführt
und umfassen Zustandsregisterwerte, Daten und Code, durch den dieselben
ausgeführt
werden. Das kombinierte ausführbare
Bild 424 ermöglicht
es, dass das Software-Entwicklungstool unter dem Benutzerprozess-300-Ausführungsfluss
ausgeführt
wird. Das kombinierte ausführbare
Bild 424 wird ausgeführt
durch Verwenden von Zustandsregisterwerten des Benutzerprozesscodes,
die modifiziert wurden, um die Ausführung der Hilfssteuercodemodule 422 in dem
Speicher des Benutzerpro zesses zu ermöglichen. Das Objektmodul des
Hilfssteuercodes 422 ersetzt Befehle für Benutzerprozessbefehle und
behält
Computerzustandsregisterwerte bei, die der Benutzerprozess ohne
das angehängte
Hilfssteuercodemodul 422 erzeugt hätte. Das Objektmodul des Hilfssteuercodes 422 führt ferner
zumindest einen Befehl aus, wodurch die ausgeführten Ergebnisse die gleichen
Ergebnisse sind, die ohne das Einfügen des Software-Entwicklungstools
erzeugt worden wären.
-
Obwohl
ein spezifisches Ausführungsbeispiel
der Erfindung beschrieben und dargestellt wurde, soll die Erfindung
nicht auf die spezifischen Formen oder Anordnungen von Teilen beschränkt werden,
die so beschrieben und dargestellt sind.