DE69932371T2 - Verschiebbare Instrumentationskennzeichen für die Prüfung und die Fehlerbeseitigung eines Computerprogramms - Google Patents

Verschiebbare Instrumentationskennzeichen für die Prüfung und die Fehlerbeseitigung eines Computerprogramms Download PDF

Info

Publication number
DE69932371T2
DE69932371T2 DE69932371T DE69932371T DE69932371T2 DE 69932371 T2 DE69932371 T2 DE 69932371T2 DE 69932371 T DE69932371 T DE 69932371T DE 69932371 T DE69932371 T DE 69932371T DE 69932371 T2 DE69932371 T2 DE 69932371T2
Authority
DE
Germany
Prior art keywords
source code
tag
value
variable
base
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE69932371T
Other languages
English (en)
Other versions
DE69932371D1 (de
Inventor
Sidney R. Bothell Maxwell
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NXP USA Inc
Original Assignee
Metrowerks Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Metrowerks Corp filed Critical Metrowerks Corp
Publication of DE69932371D1 publication Critical patent/DE69932371D1/de
Application granted granted Critical
Publication of DE69932371T2 publication Critical patent/DE69932371T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler

Description

  • Technisches Feld
  • Die vorliegende Erfindung bezieht sich auf die Instrumentierung eines Computerprogramms zur Prüfung und Fehlerbeseitigung, und im Speziellen auf die Instrumentierung eines Computerprogramms mit Kennzeichnungsanweisungen.
  • Hintergrund der Erfindung
  • Der Softwareentwicklungsprozess besteht typischerweise aus der unabhängigen Erzeugung zahlreiche Quellcodemodule, die gemeinsam ein komplettes Computerprogramm festlegen. Die Quellcodemodule werden dann kompiliert und zusammen verknüpft, um ein ausführbares Computerprogramm zu bilden. Da mehrere Softwareentwickler ein oder mehrere dieser Quellcodemodule geschrieben haben könnten, müssen die Quellcodemodule oder die kompilierten Versionen typischerweise auf einen einzelnen Computer zum Verknüpfen übertragen werden. Sobald das ausführbare Computerprogramm erzeugt worden ist, kann der Softwareentwickler das Computerprogramm prüfen und Fehler beseitigen und dabei Standardprüfungs- und Fehlerbeseitigungsmethoden verwenden.
  • Wegen der Anzahl von Quellcodemodulen ist das entstehende Computerprogramm oft sehr komplex. Das Prüfen und anschließend die Fehlerbeseitigung von Computerprogrammen sind wichtige Schritte in jedem Softwareentwicklungsprozess, und diese Schritte werden sogar noch wichtiger für komplexe Computerprogramme. In der Tat, solch eine Fehlerbeseitigung (d. h. verbessern jeglicher Fehler) kann sogar eine vertragliche Forderung, vor der Abnahme durch die für das Computerprogramm beabsichtigten Benutzer bilden. Es ist nicht überraschend, dass die Schwierigkeit der Prüfung und Fehlerbeseitigung von Computerprogrammen allgemein ansteigt, wenn die Komplexität zunimmt. Zusätzlich steigt oft die Schwierigkeit beim Testen eines kompletten Computerprogramms mit der Anzahl von Softwareentwicklern.
  • Beim Prüfen eines Computerprogramms muss ein Softwareentwickler normalerweise sicherstellen, dass jedes Quellcodemodul unabhängig seine beabsichtigten Funktionen korrekt ausführt und dass das Computerprogramm, umfassend alle den Quellcodemodulen, seine beabsichtigte Funktion auch korrekt ausführt. Um in einem Computerprogramm die Fehler richtig zu beseitigen, muss der Softwareentwickler typischerweise die Ausführung des Computerprogramms verfolgen. Das Verfolgen der Ausführung zeigt genau, welche Schritte in dem Computerprogramm ausgeführt worden sind und die Reihenfolge, in welcher diese ausgeführt worden sind. Das Verfolgen der Ausführung eines Computerprogramms kann durch eine Instrumentierung der Quellcodemodule durchgeführt werden.
  • Die Quellcodeinstrumentierung besteht typischerweise aus dem Einfügen einer ausführbaren Kennzeichnungszuweisungsanweisung, oder "Kennzeichen" in einem Quellcodemodul eines Computerprogramms an mehreren Kennzeichnungspunkten vor dem Kompilieren des Quellcodemoduls. Kennzeichnungspunkte sind Stellen von Interesse in dem Quellcodemodul, wie z. B. Eintritt oder Austritt einer Funktion, die alternativen Zweige einer Auswahlanweisung, und das Ausführen einer Schleifenanweisung, an denen ein Softwareentwickler den Status des Computerprogramms beim Ausführen wissen wollen könnte. An jedem Kennzeichnungspunkt weist die Kennzeichnungszuweisungsanweisung typischerweise der Kennzeichnungsvariablen einen eindeutigen Wert zu. Eine Instrumentierungsdatenbank ("IDB") enthält Daten bezüglich dem Kennzeichnungspunkt, wie z. B. den Kennzeichnungswert, der der Kennzeichnungsvariablen an jedem Kennzeichnungspunkt zugewiesen ist und Informationen über das Quellcodemodul an dem Kennzeichnungspunkt.
  • Ein Softwareentwickler kann dann das instrumentierte Computerprogramm ausführen und den aktuellen Wert der Kennzeichnungsvariable überwachen, um die Ausführung des Computerprogramms verfolgen. Die Kennzeichnungswerte, die während der Computerprogrammausführung erzeugt werden, können gespeichert werden, um ein Verfolgen der Ausführung des Computerprogramms zu liefern. Nachfolgend der Ausführung des Computerprogramms liefern diese Kennzeichnungswerte Hinweise zur Identifizierung der Kennzeichnungspunkte in dem Computerprogramm. Auf diese Weise dienen Kennzeichen als ein Mittel zum Anzeigen der Ausführung eines bestimmten Bruchstücks des Computerprogramms.
  • Die Instrumentierung kann typischerweise durch das Benutzen von "nach Adresse"- oder "nach Wert"-Schemata erreicht werden. In einer Instrumentierung nach dem Adressschema wird eine eindeutige Speicherstelle mit einer eindeutigen Adresse für jeden Kennzeichnungspunkt bestimmt und die Kennzeichnungsanweisung speichert einen Kennzeichnungswert an seiner eindeutigen Stelle. Zum Beispiel kann ein einzelner Kennzeichnungswert benutzt werden und wenn dieser Kennzeichnungswert an eine eindeutige Stelle geschrieben wird, kann der Softwareentwickler folgern, dass ein entsprechender Kennzeichnungspunkt in dem Computerprogramm ausgeführt worden ist. In einer Instrumentierung nach dem Wertschema werden unterschiedliche Kennzeichnungswerte an eine einzelne Speicherstelle geschrieben und der Kennzeichnungswert, der an diese Stelle geschrieben wurde, eher als die Stelle selbst, entspricht einem bestimmten Kennzeichnungspunkt in dem Computerprogramm. Spezialisierte Prüfer fangen typischerweise diese Kennzeichnungswerte ab und schreiben sie in eine Datei, die von einem Softwareentwickler überprüft werden kann und die als Werkzeug für die Fehlerbeseitigung des Computerprogramms verwendet werden kann.
  • Tabelle 1 liefert ein Beispiel eines Quellcodemoduls vor seiner Instrumentierung mit Kennzeichen. Quellcodemodul 1, in Tabelle 1 gezeigt, enthält Pseudocode für zwei Variablenzuweisungsanweisungen zur Variablen "A" (Zeile 4 und Zeile 8), eine "while"-Schleife (Zeile 5), einen Funktionsaufruf (Zeile 7) und eine "if-then-else"-Anweisung (Zeilen 10 bis 16). Quellcodemodul 1 enthält keine Kennzeichen und sein ausführbarer Code würde keine Kennzeichnungswerte ausgeben (d. h. Ausführen der Kennzeichnungszuweisungsanweisungen). Auf diese Weise wird der Softwareentwickler keinen Zugriff auf eine Hinweistabelle aus Kennzeichnungswerten für Quellcodemodul 1 haben, um festzustellen, z. B., dass "function_1" (Zeile 7) durch dieses Quellcodemodul ausgeführt wurde.
  • Figure 00040001
    Tabelle 1
  • Tabelle 2 gibt ein Beispiel eines Quellcodemoduls 1 nach seiner Instrumentierung mit Kennzeichen in einer Instrumentierung nach dem Wertschema. Ein Instrumentierer hat für eine Kennzeichnungsvariable, "AMC_Control_Port" (Zeile 2), eine Vereinbarung in Quellcodemodul 1 eingefügt. (In einer Instrumentierung nach dem Adressschema würde der Instrumentierer typischerweise Vereinbarungen für mehrere Kennzeichnungsvariablen einfügen.) Der Instrumentierer hat auch Kennzeichnungszuweisungsanweisungen an verschiedenen Kennzeichnungspunkten (Zeilen 7, 11, 15, 19, 21 und 25) innerhalb des Quellcodemoduls 1 eingefügt, welches den Pseudocode, wie vorher in Tabelle 1 gezeigt, enthält. Ein ausführbares Computerprogramm, das das instrumentierte Quellcodemodul 1 enthält, wird während dem Ausführen Kennzeichen ausgeben. Deshalb kann ein Softwareentwickler sich auf eine Tabelle mit ausgegebenen Kennzeichnungswerten beziehen, um festzustellen, welche Schritte aus Quellcodemodul 1 ausgeführt worden sind. Zum Beispiel kann ein Softwareentwickler nachprüfen, ob "function_1" (Zeile 8) in Quellcodemodul 1 ausgeführt worden ist, indem er feststellt, ob eine Kennzeichnungsvariable mit dem Wert "0" (Zeile 7) in der Tabelle mit den ausgegebenen Kennzeichnungswerten gespeichert worden ist. Wenn eine "0" gespeichert worden ist, dann kann der Softwareentwickler folgern, dass "function_1" ausgeführt worden ist, und wenn eine "0" nicht gespeichert worden ist, dann kann der Softwareentwickler folgern, dass "function_1" nicht ausgeführt worden ist.
  • Figure 00050001
    Tabelle 2
  • 1 zeigt ein typisches Überwachungssystem, das im Zusammenhang mit einer Quellcodeinstrumentierung nach dem Wertschema steht. Sobald ein Computerprogramm mit Kennzeichnungszuweisungsanweisungen instrumentiert worden ist, überwacht eine spezialisierte Prüfungsvorrichtung die Ausführung des Computerprogramms. Da das Computerprogramm innerhalb von CPU 100 ausgeführt wird, erfasst spezialisierte Hardware 103 das Schreiben an bestimmten Stellen im Speicher 102. In der Instrumentierung nach dem Wertschema kennt diese spezialisierte Hardware die Adresse der Kennzeichnungsvariablen. Während das Computerprogramm ausgeführt wird, gehen Daten zwischen der CPU und dem Speicher über den Adress- und Datenbus 101. Prüfer 105 überwacht den Adressbus und schaut nach dem Auftreten des Schreibens von Daten an die Adressstelle der Kennzeichnungsvariablen. Wenn der Prüfer ein Schreiben für die Kennzeichnungsvariable feststellt, kopiert der Prüfer den Kennzeichnungswert aus der Datenbusverbindung 104. Der Prüfer hängt dann einen Zeitstempel an den Kennzeichnungswert an, bevor er den Kennzeichnungswert an den Datenreduktionsprozessor 107 über Verbindung 106 weiter gibt. Der Datenreduktionsprozessor identifiziert bestimmte Kennzeichnungspunkte als solche, die zusätzliche Verarbeitung erfordern. Zum Beispiel paart der Datenreduktionsprozessor Funktionseintrag und Austrittskennzeichnungswerte so zusammen, dass der Unterschied der Zeitstempel berechnet werden kann, um die Menge der Zeit zu bestimmen, die während der Ausführung der entsprechenden Funktion verbracht wird. Der Datenreduktionsprozessor bereitet dann einen Bericht vor, der eine Liste von Kennzeichnungswerten und ihren entsprechenden Zeitstempeln, eine Liste von ausgeführten Funktionen, die durch Kennzeichnungswerte, zusammen mit "Leistungs"-Statistiken identifiziert werden, und eine komprimierte Liste von ausgeführten Kennzeichnungswerten, um ihre Ausführung anzuzeigen, (z. B. ein "Bewältigungsplan") beinhalten kann. Der Bericht kann auch andere Informationen enthalten. Der Datenreduktionsprozessor leitet diesen Bericht an einen Arbeitsplatz weiter, der den Bericht einer grafischen Benutzeroberfläche ("GUI") 108 bereitstellt. Die GUI 108 identifiziert die Kennzeichnungspunkte, die den Kennzeichnungswerten entsprechen, welche in dem Bericht vom Datenreduktionsprozessor gefunden wurden mit Hilfe der in der IDB 109 gespeicherten Daten. Die GUI 108 erstellt dann einige von mehreren Berichten, die neben der Identifizierung der Kennzeichnungspunkte zusätzliche Informationen enthalten können, um den Verlauf der Ausführung zu zeigen. Zusätzliche Information, die häufig an jeden berichteten Kennzeichnungspunkt angefügt wird, enthält den Namen des Quellcodemoduls, von welchem aus die Kennzeichnungsanweisung ausgefordert worden ist, die Zeilennummern für den Beginn und das Ende der Funktion, die die Kennzeichnungszuweisungsanweisung beinhaltet, und andere Informationen, die die Art des Kennzeichnungspunktes identifizieren. Ein Softwareentwickler überwacht den Ausführungsverfolgungsbericht über die GUI, um festzustellen, ob das Computerprogramm innerhalb von erwarteten Parametern arbeitet.
  • Um ein Computerprogramm dazu zu bringen, während der Ausführung Kennzeichnungswerte auszugeben, muss das Computerprogramm zuerst mit Kennzeichnungszuweisungsanweisungen ausgestattet werden. Ein Instrumentierer fügt typischerweise Kennzeichnungszuweisungsanweisungen in das Quellcodemodul eines Computerprogramms, während dem Instrumentierungsarbeitsgang ein, der stattfindet, bevor die Quellcodemodule kompiliert werden. Wenn eine Kennzeichnung nach dem Wertschema verwendet wird, besitzt die Kennzeichnungszuweisungsanweisung normalerweise eine einfache Form, wie z. B. "AMC_control_port = 0x12345678", bei der der überwachten Kennzeichnungsvariable "AMC_control_port" ein eindeutiger Kennzeichnungswert "0x12345678" zugewiesen wird. 2A zeigt ein exemplarisches Kennzeichnungswertformat. In diesem Beispiel ist der Wert eine 32 Bit-Zahl. Während dem Instrumentierungsarbeitsgang erfasst der Instrumentierer passende Informationen über die Stelle von jedem der einge fügten Kennzeichen, die anschließend dafür verwendet werden kann, um das Verhalten des Computerprogramms während der Ausführung zu deuten. Wie oben beschrieben, überwacht ein Prüfer die Adresse, an welche die Kennzeichnungsvariable geschrieben wird. Zum Beispiel, wenn ein bestimmtes Kennzeichen den Eintritt in eine Funktion mit dem Namen "read_data" darstellt, dann kann ein Softwareentwickler, wenn während der Laufzeit das Computerprogramm die durch dieses Kennzeichen zugewiesenen bestimmten Kennzeichnungswerte ausgibt, folgern, dass das Computerprogramm die Anweisung beim Eintritt der Funktion "read_data" ausgeführt hat.
  • In üblichen Instrumentierungsschemata werden die Quellcodemodule, die das Computerprogramm repräsentieren, erst durch einen Kompilierervorprozessor vorverarbeitet. Der Vorprozessor erweitert Makros, entfernt Kommentare und erweitert Aufnahmedateien. Der Instrumentierer nimmt dann diese vorverarbeiteten Quellcodemodule und fügt die Kennzeichnungszuweisungsanweisungen hinzu. Der Kompilierer erzeugt Objektcode aus den instrumentierten Quellcodemodulen und ein Verknüpfer kombiniert dann den Objektcode, um ausführbaren Code zu bilden.
  • Wenn alle Quellcodemodule eines Computerprogramms zur gleichen Zeit instrumentiert werden, kann ein Instrumentierer jedem Kennzeichnungspunkt einen eindeutigen Kennzeichnungswert zuweisen. Allerdings, wenn die verschiedenen Quellcodemodule zu unterschiedlichen Zeiten (z. B. durch unterschiedliche Softwareentwickler) instrumentiert und kompiliert werden, dann tritt ein Problem auf. Insbesondere kann der Instrumentierer zwei unterschiedlichen Kennzeichnungspunkten den gleichen Kennzeichnungswert zuweisen. Die Folge ist, wenn ein Computerprogramm diese Kennzeichnungswerte ausgibt, kann ein Softwareentwickler Schwierigkeiten haben, dem Verlauf der Ausführung zu folgen, da dieser einen Kennzeichnungspunkt nicht eindeutig identifiziert.
  • Tabelle 3A zeigt das instrumentierte Quellcodemodul 1, das vorher in Tabelle 2 gezeigt wurde, und Tabelle 3B zeigt das instrumentierte Quellcodemodul 2. Beide Quellcodemodule wurden ohne Berücksichtigung der Kennzeichnungswerte, die dem anderen zugewiesen wurden, instrumentiert, wie es aufgrund von einer Instrumentierung zu verschiedenen Zeitabschnitten auftreten kann. Folglich, wenn ein Computerprogramm, das diese beiden Quellcodemodule enthält, z. B. ein Kennzeichen mit dem Wert "0" während der Ausführung ausgibt, wird der Softwareentwickler nicht wissen, ob das Programm den Aufruf der function_1 (Zeile 8) des Quellcodemoduls 1 ausgeführt hat oder ob das Pro gramm die "if"-Anweisung (Zeile 6) des Quellcodemoduls 2 ausgeführt hat. In der Tat teilt Quellcodemodul 1 zehn Kennzeichnungswerte mit dem Quellcodemodul 2. Folglich, kein Kennzeichen, das während dem Ausführen des Computerprogramms ausgegeben wurde, kann als aus dem Quellcodemodul 1 entspringend, bestätigt werden und nur die Kennzeichen in Quellcodemodul 2 nach dem zehnten Kennzeichen würden eindeutige Werte ausgeben.
  • Figure 00080001
    Tabelle 3A
  • Figure 00090001
    Tabelle 3B
  • Einige Instrumentierer bieten Methoden an, um auf IDBs zu verweisen, die für Quellcodemodule von früheren Versionen des Computerprogramms erzeugt wurden, die auch für die jetzt zu produzierende Version des Computerprogramms benutzt werden. Wenn ein Quellcodemodul sich seit der vorherigen Version des Computerprogramms nicht verändert hat, dann verläuft der Instrumentierungsprozess effizienter, da keine Re-Instrumentierung jener Quellcodemodule, die sich nicht verändert haben, vorgenommen wird. Allerdings muss darauf Acht gegeben werden, zu gewährleisten, dass die Kennzeichnungswerte, die im Instrumentierungsablauf für die neuere Version des Computerprogramms zugewiesen werden, nicht mit den Kennzeichnungswerten, die in einer früheren Version des Computerprogramms zugewiesen wurden, in Konflikt geraten, die auch in der neuen Version des Computerprogramms benutzt werden.
  • Einige herkömmliche Systeme unterstützen diese effizientere stufenweise Instrumentierungsarbeitsweise, die oben vorgeschlagen wurde. Wenn nur ein Quellcodemodul sich geändert hat, braucht bei dieser Vorgehensweise nur dieses Quellcodemodul re-instrumentiert und kompiliert zu werden, bevor man das komplette Programm wieder verknüpft. Allerdings leiden diese konventionellen Systeme an einer Beschränkung, die es erforderlich macht, dass der Softwareentwickler den Instrumentierer auf die Gruppe von IDBs lenkt, die alle bis zu diesem Zeitpunkt im Entwicklungsdurchlauf zugewiesenen Kennzeichnungswerte enthält. Für zentralisierte Kompilierungsumgebungen, wo ein Konfigurationsmanager die Kontrolle der Quellcodemodule zusammen mit den Softwareentwicklern koordiniert, sollte dieses Erfordernis nicht zu einschränkend sein. Softwareentwickler in solch zentralisierten Umgebungen profitieren wahrscheinlich von einer kontrollierten Methode zum Lokalisieren bestimmter Versionen der Quellcodemodule, Objektcodedateien und IDBs, also ist das Identifizieren von IDBs von früheren Versionen des Computerprogramms relativ einfach. Jedoch bricht dieser Mechanismus in großen dezentralisierten Umgebungen zusammen, die für viele moderne Softwareentwicklungsprojekte typisch sind. Ungleiche Gruppen von Softwareentwicklern können jeder für sich verantwortlich für den Aufbau von dynamisch verknüpften Libraries oder kompilierten Libraries aus, von vielen Projekten benutzten Objektcode oder für unterschiedliche Gruppen von Softwareentwicklern aus demselben Projekt sein. Mit keiner zentralisierten Kontrolle über die Erzeugung von neuen Versionen des Computerprogramms kann jeder dieser Libraries unabhängig voneinander instrumentiert werden, was zu Konflikten bei Kennzeichnungswerten, die durch den Instrumentierer zugewiesen werden, führt. Während der Laufzeit verwirren diese widersprüchlichen Kennzeichnungswerte den Analyseprozess, weil ein identischer Kennzeichnungswert auf mehrere Quellcodemodule hinweisen kann, und das Überwachungswerkzeug des Computerprogramms nicht weiß, welcher Kennzeichnungswert welchem Quellcodemodul entspricht.
  • Darüber hinaus unterstützt das zentralisierte Kompilierungsmodell die parallele Erzeugung von Versionen des Computerprogramms nicht. Moderne Softwareprojekte sind oftmals so groß, dass es impraktikabel ist, das komplette Computerprogramm auf einer Maschine zu kompilieren und zu verknüpfen. In einer vernetzten Umgebung kann der Kompilierungsprozess auf viele Maschinen verteilt werden, so dass diese die Quellcodemodule parallel kompilieren können und so die Kompilierung in einem Bruchteil der Zeit abschließen, typischerweise 1/n von der Zeit, wobei n die Anzahl der angebundenen Maschinen ist. Auf diese Weise, wenn eine Version des Computerprogramms aus 1000 Quellcodemodulen besteht, wobei 100 der Quellcodemodule auf zehn Maschinen kompiliert werden, erfordert der Entwickler, dass die Instrumentierung auch auf jeder dieser zehn Maschinen stattfindet, wo die Kompilierung erfolgt. Wenn das Auflösen der Kennzeichnungswerte nicht regelgerecht unter diesen Maschinen koordiniert ist, wird das ent stehende Computerprogramm unzählige Konflikte in den Kennzeichnungswerten enthalten, die in die verschiedenen Quellcodemodule eingefügt worden sind.
  • Das Dokument EP-286361 zeigt eine Softwareinstrumentierungsmethode, in der jedem Programmmodul ein eindeutiger Kennzeichnungswert zugewiesen wird, und nummerierte Instrumentierungskennzeichen in jeden Codeblock des Moduls eingefügt werden.
  • Zusammenfassung der Erfindung
  • Die Erfindung wird durch die unabhängigen Ansprüche definiert.
  • Eine Ausführungsform der vorliegenden Erfindung zeigt ein Verfahren und ein System zur Instrumentierung eines Computerprogramms mit einer Vielzahl von Quellcodemodulen mit Kennzeichnungszuweisungsanweisungen. Ein eindeutiger Wert für die Kennzeichnungsvariable in jeder Kennzeichnungszuweisungsanweisung resultiert aus dem Zuweisen eines Wertes, gleich einer Kombination eines Versatzwertes und eines Basiswertes, zu der Kennzeichnungsvariablen. Ein Versatzkennzeichnungsinstrumentierer der vorliegenden Erfindung erzeugt eine eindeutige Basisvariable für jedes Quellcodemodul, das mit Kennzeichnungszuweisungsanweisungen instrumentiert werden soll. Der Versatzkennzeichnungsinstrumentierer überprüft dann das Quellcodemodul und fügt Kennzeichnungszuweisungsanweisungen an Instrumentierungspunkten ein. Die eingefügten Kennzeichnungszuweisungsanweisungen setzen die Kennzeichnungsvariable gleich der Kombination eines Versatzwertes und der generierten Basisvariablen für dieses Quellcodemodul. Der Versatzkennzeichnungsinstrumentierer erzeugt einen eindeutigen Versatzwert für jede Kennzeichnungszuweisungsanweisung in einem Quellcodemodul. Ein Kompilierer erzeugt aus den instrumentierten Quellcodemodulen Objektcodemodule. Ein Basiswertauflöser erzeugt Quellcodeanweisungen, die einen eindeutigen Wert für jede erzeugte Basisvariable zuweisen, so dass jede Kombination von generierten Versatzwerten und Werten regenerierter Basisvariablen jeden Instrumentierungspunkt eindeutig identifiziert. Ein Kompilierer kompiliert die generierten Quellcodeanweisungen. Ein Verknüpfer verknüpft die kompilierten instrumentierten Quellcodemodule mit den kompilierten erzeugten Quellcodeanweisungen, um ein verknüpftes Programm zu bilden, so dass während dem Ausführen des verknüpften Programms die Kennzeichnungsvariable auf einen eindeutigen Wert an jedem lnstrumentierungspunkt gesetzt wird. Da die Bestimmung des Basiswertes für jede erzeugte Basisvariable bis zum Verknüpfungszeitpunkt verzögert wird, kann der Basiswertauflöser gewährleisten, dass jede Kennzeichnungszuweisungsanweisung in jedem Modul die Kennzeichnungsvariable auf einen Wert setzt, der für alle verknüpften Module eindeutig ist.
  • Kurze Beschreibung der Figuren
  • 1 zeigt ein typisches Überwachungssystem, das in Zusammenhang mit einem instrumentierten Kennzeichnungsschema für die Softwareüberprüfung und -fehlerbeseitigung steht.
  • 2A zeigt einen herkömmlichen Kennzeichnungswert, der in eine Instrumentierungsdatenbank eingefügt wird.
  • 2B zeigt den neuen Kennzeichnungswert, der durch eine beispielhafte Ausführungsform der vorliegenden Erfindung vorgesehen ist und besteht aus einer Kennzeichnungsbasisvariablen plus einem Kennzeichnungsversatzwert.
  • 3 stellt repräsentative Instrumentierungsdatenbanken dar, die mit einer Ausführungsform der vorliegenden Erfindung in Zusammenhang stehen.
  • 4 liefert ein Ablaufdiagramm für die Instrumentierung von Quellcodemodulen gemäß einer Ausführungsform der vorliegenden Erfindung.
  • 5A und B liefern ein Ablaufdiagramm für das Auflösungsverfahren für den Kennzeichnungsbasisvariablenwert in Zusammenhang mit einer Ausführungsform der vorliegenden Erfindung.
  • 6 zeigt ein Beispielsinstrumentierungsverfahren gemäß einer Ausführungsform der vorliegenden Erfindung.
  • 7 zeigt ein Beispielsinstrumentierungsverfahren gemäß einer Ausführungsform der vorliegenden Erfindung, in welcher die Quellcodemodule auf mehr als einen Computer instrumentiert werden.
  • 8 zeigt eine alternative Ausführungsform für die IDBs, die in der vorliegenden Erfindung verwendet werden.
  • 9 zeigt eine alternative Ausführungsform für den Kennzeichnungswert, der von der der vorliegenden Erfindung bereitgestellt wird, und der aus einer Kennzeichnungsbasisvariablen verknüpft mit einem Kennzeichnungsversatzwert besteht.
  • Detaillierte Beschreibung der Erfindung
  • Eine beispielhafte Ausführungsform der vorliegenden Erfindung liefert eine Instrumentierungskennzeichnungsmethode und Vorrichtung, welche eine parallele Instrumentierung durch die Kennzeichnung auf einer Vielzahl von Computern unterstützen. Ausführungsformen der vorliegenden Erfindung liefern einen Versatzkennzeichnungsinstrumentierer, der eine Instrumentierung von ein oder mehreren geänderten Quellcodemodulen erlaubt, ohne Gefahr zu laufen, dass ein Kennzeichnungswert sich mit vorher instrumentierten Quellcodemodulen oder mit Quellcodemodulen, die auf unterschiedlichen Computersystemen instrumentiert wurden, widerspricht. Eine Modifikation herkömmlicher Kennzeichnungszuweisungsanweisung ermöglicht diese erweiterten Instrumentierungsfähigkeiten.
  • Der Versatzkennzeichnungsinstrumentierer gewährleistet, dass jeder Kennzeichnungspunkt einen eindeutigen Kennzeichnungswert besitzen wird, durch die Verzögerung der eigentlichen Zuweisung des Kennzeichnungswertes zu Kennzeichnungspunkten bis zur Ausführung des instrumentierten Programms. Der Versatzkennzeichnungsinstrumentierer verwendet Kennzeichnungszuweisungsanweisungen, die eine Kennzeichnungsbasisvariable und einen Kennzeichnungsversatzwert kombinieren, um einen Kennzeichnungswert für eine Kennzeichnungsvariable zu bilden. Jedes Quellcodemodul hat eine einmalige Kennzeichnungsbasisvariable, und jeder Kennzeichnungspunkt hat einen Kennzeichnungsversatzwert, der innerhalb des Quellcodemoduls eindeutig ist. Zum Zeitpunkt der Instrumentierung fügt der Versatzkennzeichnungsinstrumentierer Kennzeichnungszuweisungsanweisungen ein, die einen konstanten Kennzeichnungsversatzwert mit der Basisvariablen für das Quellcodemodul verbinden. Zum Verknüpfungszeit punkt erzeugt ein Kennzeichnungsbasiswertauflöser einen eindeutigen Basiswert für jede Kennzeichnungsbasisvariable so, dass jede Kennzeichnungszuweisungsanweisung einen eindeutigen Kennzeichnungswert erzeugt. Der Kennzeichnungsbasiswertauflöser führt dann die Initialisierung jeder Kennzeichnungsbasisvariablen auf ihrem eindeutigen Wert aus. Während der Laufzeit, wenn die Kennzeichnungszuweisungsanweisung ausgeführt wird, wird der Wert, der der Kennzeichnungsbasisvariablen des Quellcodemoduls zugewiesen ist, mit dem konstanten Kennzeichnungsversatzwert, der der Kennzeichnungszuweisungsanweisung zugewiesen ist, verbunden, um einen Kennzeichnungswert zu bilden, der für alle Module einmalig ist. Die Kennzeichnungsvariable wird dann gleich dem einmaligen Kennzeichnungswert gesetzt. Auf diese Weise können Quellcodemodule, die zu unterschiedlichen Zeiten instrumentiert werden, ohne Widersprüche in den Kennzeichnungswerten zusammen verknüpft werden. Diese Kennzeichnungszuweisungsanweisungen werden als zum Verknüpfungszeitpunkt "verschiebbar" bezeichnet, weil der Bereich der Kennzeichnungswerte, der einer bestimmten Anweisung zugewiesen ist, sich zum Verknüpfungszeitpunkt ändern kann.
  • Die eindeutigen Kennzeichnungswerte sind eine Kombination eines Kennzeichnungsversatzwertes und dem Wert der Kennzeichnungsbasisvariablen. In einer beispielhaften Ausführungsform beginnt der Kennzeichnungsversatzwert für jedes Quellcodemodul mit einem Wert von "0". Der Versatzkennzeichnungsinstrumentierer erhöht dann den Kennzeichnungsversatzwert um 1, jedes Mal, wenn der Versatzkennzeichnungsinstrumentierer eine neue Kennzeichnungszuweisungsanweisung in das Quellcodemodul einfügt. Auf diese Weise würde ein Quellcodemodul, das 10 Kennzeichnungszuweisungsanweisungen enthält, einen Bereich von Kennzeichnungsversatzwerten von 0 bis 9 und einen nächsten Kennzeichnungsversatzwert von 10 haben. Der nächste Kennzeichnungsversatzwert weist auf den Kennzeichnungsversatzwert hin, der benutzt würde, wenn eine andere Kennzeichnungszuweisungsanweisung in das Quellcodemodul eingefügt werden sollte. Jedes Quellcodemodul hat eine eindeutige Basisvariable. In einer beispielhaften Ausführungsform ist der Wert für die Kennzeichnungsbasisvariable des ersten Moduls, wie sie zum Verknüpfungszeitpunkt festgelegt wird, 0. Der Wert für die Kennzeichnungsbasisvariable des zweiten Moduls ist der nächste Kennreichnungsversatzwert von dem ersten Modul plus dem Kennzeichnungsbasiswert des ersten Moduls. Zum Beispiel, wenn der nächste Kennzeichnungsversatzwert des Moduls 10 ist, dann würde der Kennzeichnungsbasiswert für das zweite Modul einen Wert von 10 (d. h. 10 + 0) haben. Der Wert für die Kennzeichnungsbasisvariable des dritten Moduls ist der nächste Kennzeichnungsversatzwert des zweiten Moduls plus den Kennzeichnungsbasiswert des zweiten Moduls. Zum Beispiel, wenn der nächste Kennzeichnungsversatzwert des zweiten Moduls 12 ist, dann ist der Kennzeichnungsbasiswert für das dritte Modul 22 (d. h. 12 + 10). Der Kennzeichnungsbasiswert für irgendein folgendes Modul ist gleich der Summe der nächsten Kennzeichnungsversatzwerte für jegliche vorhergehende Module, oder gleich der Summe des Basiswertes des vorhergehenden Moduls und des nächsten Kennzeichnungsversatzwertes. Auf diese Weise wird der entstehende Kennzeichnungswert eindeutig für jede Kennzeichnungszuweisungsanweisung, wenn der Kennzeichnungsversatzwert zu dem Wert der Kennzeichnungsbasisvariablen addiert wird. 2B zeigt die Erzeugung eines zum Verknüpfungszeitpunkt verschiebbaren Kennzeichnungswertes.
  • 3 zeigt Beispiel-IDBs, die im Zusammenhang mit einer beispielhaften Ausführungsform der vorliegenden Erfindung stehen. Diese IDBs beinhalten die Kennzeichnungswerte und andere Informationen, die für die Instrumentierung benötigt werden. Jede IDB kann einem Quellcodemodul entsprechen. IDB1 301 enthält Daten, die die Kennzeichnungspunkte 0 bis 9 für ein instrumentiertes Quellcodemodul darstellen. Diese Daten beinhalten den Kennzeichnungsversatzwert und die Lage von jedem Kennzeichnungspunkt. IDB1 hat eine Kennzeichnungsbasisvariable, dessen Wert, der durch den Kennzeichnungsbasiswertauflöser zum Verknüpfungszeitpunkt erstellt wird, 0 sein wird und hat einen nächsten Kennzeichnungsversatzwert von 10. Die IDB enthält den Namen der Kennzeichnungsbasisvariablen, so dass ein Kennzeichnungsbasiswertauflöser die IDB, die mit einer gegebenen Kennzeichnungsbasisvariablen in Verbindung steht, ausfindig machen kann, und die Kennzeichnungsbasisvariable dient zum Zeigen, dass die IDB von einer Art ist, die zum Verknüpfungszeitpunkt wieder beschreibbare Kennzeichen enthält. Der Versatzkennzeichnungsinstrumentierer speichert die Daten für die Kennzeichnungspunkte und den nächsten Kennzeichnungsversatzwert. Auf die gleiche Weise enthält IDB2 302 Daten, die 12 Kennzeichnungspunkten und einen nächsten Kennzeichnungsversatzwert von 12 entsprechen. Da IDB1 einen nächsten Kennzeichnungsversatzwert von 10 hat, ist der Wert der Kennzeichnungsbasisvariablen, die schließlich von dem Kennzeichnungsbasiswertauflöser IDB2 zugewiesen wird, 10. Gleichermaßen ist der Kennzeichnungsbasiswert von IDB3 303, 22, weil der nächste Kennzeichnungsversatzwert von IDB1 10 ist und der nächste Kennzeichnungsversatzwert von IDB2 12 ist (z. B. eindeutige Werte von 0 bis 21 wurden für IDB1 und IDB2 schon gewählt). Natürlich sollen die Kennzeichnungsbasiswerte, wie vorher erwähnt, nicht erzeugt werden, bis die entsprechenden Objektmodule verknüpft werden, um einen ausführbaren Code zu bilden, und die eindeutigen Kennzeichnungswerte selber sollen sogar nicht erzeugt werden bis zur Ausführung von jeder Kennzeichnungszuweisungsanweisung. Zusätzlich kann in einigen Ausführungsformen der Erfindung mehr als eine Kennzeichnungsbasisvariable in einer gegebenen IDB gespeichert werden, wobei jede Kennzeichnungsbasisvariable auf einen unterschiedlichen Typen von Kennzeichnungsanweisung hinweist. Allerdings ist ein solches Kennzeichnungsschema eine bloße Erweiterung des Schemas, das hier beschrieben wird.
  • Tabellen 4A, 4B und 4C zeigen die instrumentierten Quellcodemodule 1, 2 und 3, die jeweils der IDB1, IDB2 und IDB3 von 3 entsprechen. Wie oben im Pseudocode, der dem instrumentierten Quellcode in Tabelle 4A entspricht, gezeigt ist, hat der Versatzkennzeichnungsinstrumentierer eine Vereinbarungsanweisung für die Kennzeichnungsvariable eingefügt, welche in diesem Beispiel ein externer flüchtiger vorzeichenloser langer Variablennamen "AMC_control_port" (Zeile 3) ist. Der Versatzkennzeichnungsinstrumentierer hat auch eine Vereinbarung für "IDB1_base" (Zeile 4) eingefügt, wobei die Kennzeichnungsbasisvariable mit IDB1 und Quellcodemodul 1 zusammenhängt. Der Versatzkennzeichnungsinstrumentierer überprüft dann das Quellcodemodul und fügt Kennzeichnungszuweisungsanweisungen an Punkten von Interesse ein, wie z. B. bei Zeile 9. Diese bestimmte Kennzeichnungszuweisungsanweisung würde den Softwareentwickler auf die Ausführung des Aufrufes der function_1 (Zeile 10) hinweisen. Die Kennzeichnungszuweisungsanweisung, die aus einer Kennzeichnungsbasisvariablen plus einem Kennzeichnungsversatzwert besteht, und durch den Versatzkennzeichnungsinstrumentierer eingefügt wurde, kann auch eine ähnliche Form zu "AMC_control_port = Kennzeichnungsbasisvariable + 0x12345678" besitzen. Der Versatzkennzeichnungsinstrumentierer setzt die Kennzeichnungspunkte von Interesse innerhalb des Quellcodemoduls bis zum Erreichen seines Endes weiter. Wie in Tabelle 4A gezeigt, ereignet sich der letzte Kennzeichnungspunkt innerhalb von Quellcodemodul 1 ganz am Ende vom Quellcodemodul und ist durch eine Kennzeichnungszuweisungsanweisung gebildet, die einen Kennzeichnungswert von IDB1_base plus einem Kennzeichnungsversatzwert von 9 (Zeile 27) besitzt. Der Versatzkennzeichnungsinstrumentierer fügt auch Daten auf der vorher gezeigten Art und Weise ein, die sich auf diese Kennzeichnungszuweisungsanweisungen in IDB1 beziehen.
  • Gleichermaßen fügt das instrumentierte Quellcodemodul 2, wie in Tabelle 4B gezeigt, auch Vereinbarungsanweisungen für die Kennzeichnungsvariable "AMC_control_port" (Zeile 3) ein und eine Vereinbarung für die Variable "IDB2_base" (Zeile 4), welche der Kennzeichnungsbasisvariable für das instrumentierte Quellcodemodul 2 entspricht. Der Versatzkennzeichnungsinstrumentierer überprüft dann Quellcodemodul 2, indem Kennzeichnungszuweisungsanweisungen in das Quellcodemodul an mehreren Punkten von Interesse eingefügt werden. Zum Beispiel weist die Kennzeichnungszuweisungsanweisung, die durch "AMC_control_port = IDB2_base + 1" (Zeile 11) dargestellt wird, wenn ausgeführt, darauf hin, dass der "then"-Bereich (Zeile 9) der "if"-Anweisung, wo "A ≤ 12" (Zeile 8) ausgeführt worden ist. Genauer gesagt, weist die Lage dieser Kennzeichnungszuweisungsanweisung auch darauf hin, dass der Variablen "A" der Wert von "A – 10" (Zeile 12) zugewiesen worden ist. Der letzte Kennzeichnungspunkt in diesem Quellcodemodul ist "AMC_control_port = IDB2_base + 11" (Zeile 22). Der Versatzkennzeichnungsinstrumentierer wird in IDB2 Daten speichern, die darauf hinweisen, dass Quellcodemodul 2 Kennzeichnungszuweisungsanweisungen von 0 bis 11 und einen nächsten Kennzeichnungsversatzwert von 12 besitzt.
  • Zuletzt überprüft der Versatzkennzeichnungsinstrumentierer Quellcodemodul 3, wie in Tabelle 4C gezeigt. Ähnlich wie in den vorhergehenden zwei Quellcodemodulen fügt der Versatzkennzeichnungsinstrumentierer die Vereinbarung für die "AMC_control_port"-Variable (Zeile 3) ein. Der Versatzkennzeichnungsinstrumentierer fügt auch eine Vereinbarung für die Kennzeichnungsbasisvariable "IDB3_base" (Zeile 4) ein. Der Versatzkennzeichnungsinstrumentierer fährt dann fort, Punkte von Interesse innerhalb des Quellcodemoduls durch die Verwendung von Kennzeichnungszuweisungsanweisungen zu kennzeichnen. Die letzte Kennzeichnungszuweisungsanweisung "AMC_control_port = IDB3_base + 6" (Zeile 10) tritt am Ende des Quellcodemoduls 3 ein.
  • Figure 00180001
    Tabelle 4A
  • Figure 00180002
    Tabelle 4B
  • Figure 00190001
    Tabelle 4C
  • 4 zeigt ein Ablaufdiagramm für die instrumentierung von Quellcodemodulen gemäß einer beispielhaften Ausführungsform der vorliegenden Erfindung. Der Versatzkennzeichnungsinstrumentierer wählt jedes Quellcodemodul aus, fügt die vereinbarenden Anweisungen und Kennzeichnungszuweisungsanweisungen in das ausgewählte Modul ein und speichert die Daten in der IDB. Zuerst stellt der Versatzkennzeichnungsinstrumentierer fest, ob noch mehr Quellcodemodule eine Instrumentierung erfordern (Schritt 401). Wenn keine Quellcodemodule mehr zum Instrumentieren übrig sind, bricht der Versatzkennzeichnungsinstrumentierer ab. Allerdings, wenn es noch Quellcodemodule, die eine Instrumentierung benötigen, gibt, wählt der Versatzkennzeichnungsinstrumentierer das nächste Quellcodemodul, das zu Instrumentieren ist (Schritt 402) aus. Der Versatzkennzeichnungsinstrumentierer setzt dann den Kennzeichnungsversatzwert auf 0 zurück (Schritt 403). Der Versatzkennzeichnungsinstrumentierer öffnet eine neue Instrumentierungsdatenbank und wählt einen Namen für diese neue IDB aus (Schritt 404). Der Versatzkennzeichnungsinstrumentierer verwendet diesen ausgewählten Namen auch, um einen Namen für eine neue Kennzeichnungsbasisvariable zu erzeugen, die in das Quellcodemodul, das zu instrumentieren ist, einzufügen ist. Der Versatzkennzeichnungsinstrumentierer beginnt dann die Überprüfung des Quellcodemoduls (Schritte 405411). Der Versatzkennzeichnungsinstrumentierer fügt eine Vereinbarung für die Kennzeichnungsvariable in das Quellcodemodul ein (Schritt 405) und fügt dann eine Vereinbarung für die Kennzeichnungsbasisvariable von diesem Quellcodemodul ein (Schritt 406). Diese Vereinbarungen werden denen ähneln, die in Tabelle 4A, 4B und 4C für AMC_control_port, IDB1_base, IDB2_base und IDB3_base gezeigt sind. Der Versatzkennzeichnungsinstrumentierer bildet dann eine Schleife zum Einfügen der Kennzeichnungszuweisungsanweisungen (Schritte 407411). Der Versatzkennzeichnungsinstrumentierer stellt fest, ob im Quellcodemodul Kennzeichnungspunkte übrig sind (Schritt 407). Wenn Kennzeich nungspunkte übrig sind, lokalisiert der Versatzkennzeichnungsinstrumentierer die nächsten Kennzeichnungspunkte innerhalb des Quellcodemoduls (Schritt 408). Nach der Lokalisierung des nächsten Kennzeichnungspunktes fügt der Versatzkennzeichnungsinstrumentierer eine Kennzeichnungszuweisungsanweisung ein (Schritt 409). Diese Kennzeichnungszuweisungsanweisung hat typischerweise die Form "AMC_control_port = Kennzeichnungsbasisvariable plus den aktuellen Kennzeichnungsversatzwert", wie vorher erörtert. Nach diesem Schritt wird dann der Kennzeichnungsversatzwert um eins erhöht (Schritt 410). Zusätzlich wird ein Kennzeichnungseintrag in der dazugehörigen IDB gebildet (Schritt 411). Der Kennzeichnungseintrag enthält typischerweise den Kennzeichnungsversatzwert für diesen Kennzeichnungspunkt, Informationen über den Quellcode an dem Kennzeichnungspunkt und die Einstellung des nächsten Kennzeichnungsversatzwertes auf den erhöhten Versatz. Der Versatzkennzeichnungsinstrumentierer geht dann zurück (zu Schritt 407), um den nächsten Kennzeichnungspunkt zu verarbeiten. Nach der Instrumentierung des Quellcodemoduls wird die IDB für dieses Quellcodemodul geschlossen (Schritt 412). Der Versatzkennzeichnungsinstrumentierer geht dann zurück (zu Schritt 401), um festzustellen, ob andere Quellcodemodule instrumentiert werden müssen.
  • Wie vorher erwähnt, werden den Kennzeichnungsbasisvariablen ihre Werte nicht während dem Instrumentierungsablauf oder während dem Kompilieren der instrumentierten Quellcodemodule zugewiesen. Da der Wert der Kennzeichnungsbasisvariablen zum Verknüpfungszeitpunkt zugewiesen wird, muss nur der Verknüpfungsprozess zentralisiert werden. Diese Methode unterstützt deshalb eine typische parallele Kompilierung von neuen Versionen des Computerprogramms. Ähnlich zum Verknüpfen eines ausführbaren Computerprogramms enthält ein Instrumentierungsverknüpfer, gemäß einer Ausführungsform, einen Kennzeichnungsbasiswertauflöser, der den Wert, der für jede Kennzeichnungsbasisvariable gebraucht wird, auflöst und den Bereich der Kennzeichnungswerte, der von jeder Objektcodedatei benötigt wird, auflöst, so dass keine Konflikte unter den endgültigen Kennzeichnungswerten auftreten. Diese Methode unterstützt die Instrumentierung von riesigen Computerprogrammen, die tausende von Quellcodemodulen einbinden, die in parallel kompiliert werden können, um dabei riesige Mengen an Zeit zu sparen. Wenn die Verknüpfung der Objektcodedateien auf einem einzelnen Computer stattfindet, so auch der Instrumentierungsverknüpfungsprozess, der die eigentlichen Kennzeichnungswerte abschließt, die zugewiesen werden, während das Computerprogramm ausgeführt wird. Deshalb haben die Variablen IDB1_base, IDB2_base und IDB3_base, die oben in Bezug auf 3 und Tabellen 4A, 4B und 4C erörtert wurden, keinen Wert festgelegt, vor der Verknüpfung der Objektdateien, die das Computerprogramm darstellen. Wie in Tabelle 5 gezeigt, bereitet der Instrumentierungsverknüpfer Quellcodeanweisungen für die aufgelösten Kennzeichnungsbasisvariablen vor, die dann kompiliert werden und mit den Objektcodedateien für die instrumentierten Quellcodemodule verknüpft werden. Wie in Tabelle 5 gezeigt, bereitet der Instrumentierungsverknüpfer Quellcode vor, der die Kennzeichnungsbasisvariable für IDB1, IDB1_base auf einen Wert von 0 setzt (Zeile 3). Gleichermaßen wird die Kennzeichnungsbasisvariable für IDB2 (IDB2_base) einen Wert von 10 haben (Zeile 5), und die Kennzeichnungsbasisvariable für IDB3 (IDB3_base) wird einen Wert von 22 haben (Zeile 7).
  • Figure 00210001
    Tabelle 5
  • Der Kennzeichnungsbasiswertauflöser kann bestimmte Kennzeichnungswertbereiche vermeiden. Diese Fähigkeit kann den Instrumentierungsprozess für den Softwareentwickler in einer Vielzahl von unterschiedlichen Zusammenhängen vereinfachen, von denen einige unten ausgeführt werden.
  • Als erstes kann ein Computerprogramm eine Vielzahl von Quellcodemodulen enthalten, die sich selten ändern und Altcode in Form von Quellcodemodulbibliotheken enthalten. (Altcode beinhaltet Code, der mit Kennzeichnungszuweisungsanweisungen, die die Kennzeichnungsvariable zu einem konstanten Wert setzen, instrumentiert wurden und die deshalb nicht kompatibel mit der Verwendung von zum Verknüpfungszeitpunkt verschiebbaren Kennzeichnungswerten ist.) Das Instrumentierungsverfahren würde offensichtlich effizienter sein, wenn der Softwareentwickler solche Quellcodemodule nur einmal instrumentieren müsste, solange wie die Module nicht geändert werden.
  • Als zweites würde sich der Softwareentwickler einfach wünschen, einen Bereich von Kennzeichnungswerten für ein Quellcodemodul zu reservieren, der nicht unter der Verwendung des Versatzkennzeichnungsinstrumentierers instrumentiert wird. Zum Beispiel könnte sich der Softwareentwickler wünschen, ein besonders fehleranfälliges Quellcodemodul per Hand zu instrumentieren, und dabei viel mehr Kennzeichnungszuweisungsanweisungen einfügen als typischerweise durch einen Versatzkennzeichnungsinstrumentierer eingefügt würden. In solch einer Situation könnte der Softwareentwickler einfach den eingefügten Kennzeichnungszuweisungsanweisungen Werte zuweisen, dann den Kennzeichnungsbasiswertauflöser anweisen, diesen Bereich von Kennzeichnungswerten zu vermeiden, wenn Kennzeichnungswerte für andere Quellcodemodule dieses Computerprogramms aufgelöst werden.
  • Als drittes könnten sich einige Quellcodemodule von einer Version von Computerprogramm zur nächsten nicht verändert haben. Diese Quellcodemodule könnten vorher instrumentiert worden sein, und deren zugehörigen Kennzeichnungswerte könnten noch immer eindeutig sein. Deshalb könnte sich der Softwareentwickler wünschen, eine effizientere Vorgehensweise zu verfolgen, bei der einfach der Kennzeichnungsbasiswertauflöser angewiesen wird, den Bereich von Kennzeichnungswerten, die zu diesem vorher instrumentierten und aktuell unveränderten Quellcodemodulen zugewiesen wurden, zu reservieren und neue Kennzeichnungswerte nur für jene Quellcodemodule zu bestimmen, die sich verändert haben und in dieser letzten Version des Computerprogramms re-instrumentiert worden sind.
  • Als viertes kann das dritte Beispiel oben weiter unterstützt werden, indem der nächste Kennzeichnungsversatzwert in einer Version des Computerprogramms so gesetzt wird, dass zusätzliche Kennzeichnungszuweisungsanweisungen in einer späteren Version des Computerprogramms eingefügt werden können, ohne eine Wiederberechnung der Kennzeichnungsbasisvariablen zu erfordern. Zum Beispiel, wie oben in Bezug auf Tabelle 4A erörtert, kann der nächste Kennzeichnungsversatzwert für das instrumentierte Quellcodemodul 1 bis auf 10 heruntergesetzt werden, um eindeutige Kennzeichnungswerte zu gewährleisten. Allerdings, wenn der nächste Kennzeichnungsversatzwert für das instrumentierte Quellcodemodul 1 auf 12 gesetzt wurde anstatt auf 10, dann könnten zwei zusätzliche Kennzeichnungszuweisungsanweisungen in das Quellcodemodul 1 in einer späteren Version des Computerprogramms eingefügt werden, ohne eine Wiederberechnung von irgendwelchen Basisvariablen (z. B. IDB2_base) zu erfordern, und dabei noch immer eindeutige Kennzeichnungswerte für das Computerprogramm gewährleisten.
  • Als fünftes können einige Ausführungsformen der vorliegenden Erfindung so strukturiert werden, dass während einer ersten Version des Computerprogramms der Instrumentationsverknüpfer nicht nur die Kennzeichnungsbasisvariablen für die instrumentierten Quellcodemodule des Computerprogramms festlegt, sondern auch die eigentlichen Kennzeichnungswerte für jede Kennzeichnungszuweisungsanweisung festlegt. (Wie vorher erörtert, wird der eigentliche Kennzeichnungswert typischerweise während dem Ausführen des Computerprogramms bestimmt.) In dieser Ausführungsform speichert der instrumentierungsverknüpfer dann diesen Bereich der eigentlichen Kennzeichnungswerte, so dass dieser Bereich in der entsprechenden IDB für jedes instrumentierte Quellcodemodul gespeichert wird. In dem Instrumentierungsablauf für eine spätere Version des Computerprogramms überprüft der Versatzkennzeichnungsinstrumentierer jedes instrumentierte Quellcodemodul, um festzustellen, ob sich das instrumentiere Quellcodemodul seit der vorherigen Version des Computerprogramms verändert hat. Wenn sich ein gegebenes Quellcodemodul nicht verändert hat, dann holt sich der Versatzkennzeichnungsinstrumentierer den Bereich der eigentlichen Kennzeichnungswerte für das Quellcodemodul und ersetzt die Kennzeichnungszuweisungsanweisungen der Form "Kennzeichnungsvariable ist gleich Basisvariable und Kennzeichnungsversatzwert" durch Kennzeichnungszuweisungsanweisungen der Form "Kennzeichnungsvariable gleich eigentlicher Kennzeichnungswert". Die Verwendung dieser einfacheren Kennzeichnungszuweisungsanweisungen für Quellcodemodule, die unverändert sind, erlaubt es, dass ihre zugehörigen Bereiche von Kennzeichnungsvariablen während dem Kompilierungsprozess zugewiesen werden, anstatt während der Ausführung des Computerprogramms. Damit diese Ausführungsform regelgerecht arbeitet, muss der Kennzeichnungsbasiswertauflöser natürlich fähig sein, einen Bereich von reservierten Kennzeichnungswerten zu empfangen und das Auflösen irgendeiner Kennzeichnungsbasisvariablen zu vermeiden, so dass sein zugehöriger Bereich von Kennzeichnungswerten mit den reservierten Kennzeichnungswerten zusammenfallen wird.
  • 5 gibt ein Ablaufdiagramm eines Kennzeichnungsbasisvariablenwertauflösungsverfahrens dar für eine Ausführungsform der vorliegenden Erfindung. Dieses Verfahren wählt jedes Modul aus und weist der Kennzeichnungsbasisvariablen des ausgewählten Moduls einen Wert zu, dabei gewährleistend, dass reservierte Bereiche vermieden werden. Als einen ersten Schritt prüft das Verfahren, um festzustellen, ob alte IDBs in dieser Version des Computerprogramms verknüpft werden (Schritt 501). Das Vorhandensein von solch alten IDBs stellt typischerweise instrumentierte Quellcodemodule dar, deren Kennzeichnungswerte nicht zum Verknüpfungszeitpunkt verschiebbare sind. Wegen der oben erläuterten Gründe haben diese alten IDBs schon Kennzeichnungswerte zugewiesen und erfordern nur, dass Platz für den Bereich von ihren Kennzeichnungswerten reserviert wird. Wenn alte IDBs existieren (Schritt 502), dann wählt das Verfahren diese alten IDBs aus (Schritt 503). Das Verfahren erstellt eine Aufzeichnung von dem Bereich der, für jedes IDB zu reservierenden, Kennzeichnungswerte (Schritt 504). Das Verfahren setzt einen reservierten Flagwert auf wahr, wenn alte IDBs vorhanden sind (Schritt 505). Das Verfahren macht weiter, bis keine alten IDBs mehr übrig bleiben, für die Platz reserviert werden muss. Sobald der ganze benötigte Platz reserviert worden ist, setzt das Verfahren dann einen anwachsenden Kennzeichnungsversatzwert auf 0 (Schritt 506). Das Verfahren führt dann eine Schleife aus, um jedem Modul einen Kennzeichnungsbasiswert zuzuweisen, das die zum Verknüpfungszeitpunkt verschiebbaren Kennzeichnungswerte benutzt (Schritte 507516). Das Verfahren wählt das nächste neue IDB aus (Schritt 507). Wenn alle von den neuen IDBs schon ausgewählt worden sind, dann bricht das Verfahren ab (Schritt 508). Andernfalls setzt das Verfahren die Kennzeichnungsbasisvariable gleich dem anwachsenden Kennzeichnungsversatzwert (Schritt 509). Das Verfahren holt dann den nächsten Kennzeichnungsversatzwert für dieses IDB zurück (Schritt 510). Das Verfahren überprüft dann den vorgeschlagenen Wert für die Kennzeichnungsbasisvariable und den nächsten Kennzeichnungsversatzwert für dieses IDB, um festzustellen, ob dieser vorgeschlagene Kennzeichnungswertebereich mit irgendwelchen reservierten Kennzeichnungswerten kollidiert. Natürlich kann dieser Schritt ausgelassen werden, wenn das reservierte Werteflag nie auf wahr gesetzt worden ist (Schritt 511). Wenn der vorgeschlagene Bereich konfliktfrei ist, dann bereitet der Kennzeichnungsbasiswertauflöser eine Quellcodeanweisung vor, die der Kennzeichnungsbasisvariablen den vorgeschlagenen Wert zuweist (Schritt 514). Wenn ein Konflikt bei Verwenden des vorgeschlagenen Wertes für die Kennzeichnungsbasisvariable auftreten würde, dann wählt der Kennzeichnungsbasiswertauflöser einen anderen Wert für die Kennzeichnungsbasisvariable, so dass der Bereich von Kennzeichnungswerten für dieses IDB nicht in Widerspruch mit dem reservierten Bereich der Kennzeichnungswerte steht (Schritt 513). Sobald ein Wert für die Kennzeichnungsbasisvariable bestimmt worden ist, speichert der Kennzeichnungsbasiswertauflöser dann die Kennzeichnungswerte für diese IDB in einer Haupt-IDB, die letztendlich alle Kennzeichnungswerte für das Computerprogramm beinhalten wird und von dem Arbeitsplatz GUI (z. B. Arbeitsplatz GUI 108 aus 1) während der Programmausführung referenziert werden kann (Schritt 515). Das Verfahren erhöht als nächstes den anwachsenden Kennzeichnungsversatzwert, um den als letzten zurückgeholten nächsten Kennzeichnungsversatzwert (Schritt 516). Das Verfahren springt dann zurück (zu Schritt 507), um das nächste IDB auszuwählen. Deshalb kann der Kennzeichnungsbasiswertauflöser auch eine Haupt-IDB erstellen, die die Information von allen IDBs zusammenfügt. Diese Haupt-IDB hat die Form einer altausgeführten IDB (z. B. eine IDB, die nicht den Namen einer Kennzeichnungsbasisvariablen enthält). Als eine afternative Ausführungsform könnte der Kennzeichnungsbasiswertauflöser eine alt ausgeführte IDB für jede IDB erstellen, nachdem ein Wert ihrer Kennzeichnungsbasisvariablen zugewiesen worden ist.
  • 6 bildet eine Veranschaulichung vom Instrumentierungsverfahren einer beispielhaften Ausführungsform der vorliegenden Erfindung. Vier Quellcodemodule 600a, 600b, 600c und 600d stellen das Computerprogramm vor der Instrumentierung dar. Ein Quellcodevorprozessor 601 entfernt Kommentare und erweitert Makros aus diesen Quellcodemodulen. Ein Versatzkennzeichnungsinstrumentierer überprüft als nächstes die Quellcodemodule, dabei in der Art und Weise, wie in 4 angedeutet, nach angemessenen Kennzeichnungspunkten suchend. Der Versatzkennzeichnungsinstrumentierer erstellt IDBs 603a, 603b, 603c und 603d während seines Überprüfungsverfahrens. Üblicherweise wird der Versatzkennzeichnungsinstrumentierer eine IDB pro Quellcodemodul erstellen, wie in 6 gezeigt. Ersatzweise können die Daten für mehrere Quellcodemodule in einer IDB gespeichert werden. Der Versatzkennzeichnungsinstrumentierer wird auch das instrumentierte Quellcodemodul 604 erstellen. In einer alternativen Ausführungsform könnte der Versatzkennzeichnungsinstrumentierer ein instrumentiertes Quellcodemodul für jedes überprüfte Quellcodemodul erstellen. Der Kompilierer 605 erzeugt Objektcode aus dem instrumentierten Quellcode. Der Kennzeichnungsbasiswertauflöser des Verknüpfers 606 stellt, in der Art und Weise wie durch 5 angedeutet, Werte für die Kennzeichnungsbasisvariablen fest und erzeugt Quellcodeanweisungen, um die Kennzeichnungsbasisvariablen zu initialisieren. Die erzeugten Quellcodeanweisungen werden dann kompiliert und mit dem kompilierten Code verknüpft, um den ausführbaren Code 610 zu bilden. Der entstehende ausführbare Code 610 kann dann für das Testen des Computerprogramms benutzt werden.
  • 7 stellt ein Bild einer beispielhaften Ausführungsform der vorliegenden Erfindung dar, bei der die Quellcodemodule auf mehr als einen Computer instrumentiert und kompiliert werden. Ein erstes Quellcodemodul 701a befindet sich auf Rechenmaschine 1. Ein Versatzkennzeichnungsinstrumentierer 702a benutzt dieses Quellcodemodul, um IDB1 704a und den kompilierten Code 705a zu erzeugen. In ähnlicher Weise hält Rechenmaschine 2 zwei Quellcodemodule 701b und 701e. Diese Quellcodemodule werden in den Versatzkennzeichnungsinstrumentierer 702b gegeben, was zu einer Erzeugung von IDB2 704b und IDB3 704e als auch des kompilierten Codes 705b führt. Gleichermaßen benutzt Versatzkennzeichnungsinstrumentierer 702e auf Rechenmaschine 3 das Quellcodemodul 4 701d, um IDB4 704d und den kompilierten Code 705c zu erzeugen. Jedes einzelne der, den kompilierten Code darstellenden, Objektdateien wird an Rechenmaschine N 706 gegeben. Die Rechenmaschine N kann irgendeine passende Rechenmaschine sein und könnte sogar eine von den drei vorhergehend erwähnten Rechenmaschinen sein. Gleichermaßen werden alte IDBs, die auf den drei Rechenmaschinen erzeugt wurden, an Rechenmaschine N gegeben. Der Verknüpfer 710 benutzt die Objektcodedateien, die auf mehreren Rechenmaschinen erzeugt wurden, um ausführbaren Code 711 zu erzeugen. Der Kennzeichnungsbasiswertauflöser des Verknüpfers löst die Werte der Kennzeichnungsbasisvariablen für jeden einzelnen der Kennzeichnungswerte, die von den IDBs in der vorher gezeigten Art und Weise dargestellt werden, so auf dass der entstehende ausführbare Code eindeutige Kennzeichnungswerte enthält.
  • Abschließend zeigt 8 eine alternative Ausführungsform der vorliegenden Erfindung. Wenn der Versatzkennzeichnungsinstrumentierer eine IDB erstellt, kann ein vorherbestimmter Füllbereich auch eingebunden werden. IDBs 800, 801 und 803 haben je solch einen Füllbereich enthalten. Dieser Füllbereich erlaubt es, zusätzliche Kennzeichnungszuweisungsanweisungen in ein bestimmtes IDB einzufügen, ohne den maximalen Bereich von Werten, die durch diese IDB dargestellt werden, zu verändern. Wenn ein großes Computerprogramm alle von seinen Quellcodemodulen vorher instrumentiert hätte und der Softwareentwickler nur eine neue Zeile von Code an das erste Quellcodemodul anfügen würde, was zu einem Hinzufügen von einer weiteren Kennzeichnungszuweisungsanweisungen führt, dann würde der Wert für die Kennzeichnungsbasisvariable von dieser IDB und all der anderen IDBs sich nicht verändern, weil diese neue Kennzeichnungszuweisungsanweisungen noch immer innerhalb des Bereiches, das durch die Füllwerte gegeben wird, sein würde. Deshalb ermöglicht dieses Verfahren eine schnellere Instrumentierung und einen schnelleren Verknüpfungsprozess.
  • 9 veranschaulicht eine alternative Ausführungsform für den, durch die vorliegende Erfindung gegebenen, Kennzeichnungswert und besteht aus einer Kennzeichnungsbasisvariablen, die an einen Kennzeichnungsversatzwert angehängt ist. Die Kennzeich nungswerte, die oben erläutert wurden, enthalten eine Kennzeichnungsbasisvariable plus einem Kennzeichnungsversatzwert. Als eine alternative Ausführungsform enthält der Kennzeichnungswert eine Kennzeichnungsbasisvariable, die an einen Kennzeichnungsversatzwert angehängt ist. Zum Beispiel könnte ein Kennzeichnungswert 64 Bits enthalten. Die ersten 32 Bits könnten den Kennzeichnungsversatzwert darstellen und die zweiten 32 Bits könnten die Kennzeichnungsbasisvariable darstellen. In dieser Ausführungsform könnten die Werte für den Kennzeichnungsversatzwert und die Kennzeichnungsbasisvariable noch immer auf der vorher gezeigten Art und Weise bestimmt werden. Allerdings, anstatt die beiden Werte zu addieren, wie in den vorhergehenden Ausführungsformen erläutert, würden die beiden Werte jetzt verkettet werden. Deshalb müsste der Verknüpfer nur jedem Quellcodemodul einen eindeutigen Kennzeichnungsbasiswert zuweisen und müsste die Werte nicht auf die Anzahl von Kennzeichnungszuweisungsanweisungen in jedem Quellcodemodul stützen. Kennzeichnungswerte, die auf diese Art und Weise erzeugt werden, würden noch immer eindeutig sein und den Computerprogrammierer ermöglichen, die Ausführung des entstehenden Computerprogramms zu verfolgen.
  • Aus dem Vorhergehenden kann man ersehen, dass, obwohl spezielle Ausführungsformen der Erfindung hier zum Zweck der Darstellung beschrieben worden sind, können zahlreiche Änderungen gemacht werden, ohne von dem Anwendungsbereich der Erfindung abzuweichen. Zum Beispiel, wenn der Verknüpfer geändert wird, dann ist es möglich, die Kennzeichnungswerte zum Verknüpfungszeitpunkt berechnet zu haben und die Kennzeichnungswerte als Konstanten gespeichert zu haben, die der Kennzeichnungsvariablen durch die Kennzeichnungszuweisungsanweisung zugewiesen werden. Der Kompilierer könnte einen Hinweis auf die Stelle von jeder Kennzeichnungszuweisungsanweisung innerhalb des Quellcodes ausgeben. Der Verknüpfer könnte dann einen eindeutigen konstanten Wert in jeder Kennzeichnungszuweisungsanweisung speichern und die Zuordnungen von konstanten Werten zu Kennzeichnungspunkten in einer IDB speichern. Auch bezieht sich der Begriff Modul auf irgendeinen Teil des Computerprogramms, der eine komplette Quellcodedatei, einen Teil einer Quellcodedatei, eine Funktion, ein Verfahren oder irgendeine andere Sammlung von Anweisungen enthalten könnte, die das Computerprogramm bilden. Entsprechend ist die Erfindung, außer durch die angehängten Ansprüche, nicht eingeschränkt.

Claims (14)

  1. Ein Verfahren in einem Computersystem zur Instrumentierung eines Computerprogramms mit einer Vielzahl an Quellcodemodulen (600a, b, c, d), wobei das Verfahren umfasst: für jedes Quellcodemodul; Erzeugen einer Basisvariablen (202) mit einem Namen, der für das Quellcodemodul eindeutig ist; für jeden Instrumentierungspunkt in dem Quellcodemodul, Erzeugen eines Versatzwertes (203), der innerhalb des Quellcodemoduls für den Instrumentierungspunkt eindeutig ist; und Einfügen einer Kennzeichnungszuweisungsanweisung am Instrumentierungspunkt, die Kennzeichnungszuweisungsanweisung für das Setzen einer Kennzeichnungsvariablen (201) zu einer Kombination von dem generierten Versatzwert und einem Wert einer Basisvariablen; und Kompilieren des instrumentierten Quellcodemoduls (604); für jede generierte Basisvariable, Erzeugen einer Quellcodeanweisung, die die Basisvariable auf einen eindeutigen Wert setzt, so dass eine Kombination eines generierten Versatzwertes und eines Wertes einer Basisvariablen jeden Instrumentierungspunkt eindeutig identifiziert; Kompilieren der erzeugten Quellcodeanweisungen; und Verknüpfen der kompilierten instrumentierten Quellcodemodule mit den kompilierten erzeugten Quellcodeanweisungen, um ein verknüpftes Programm zu bilden, so dass während des Ausführens des verknüpften Programms die Kennzeichnungsvariable zu einem eindeutigen Wert an jedem Instrumentierungspunkt gesetzt wird.
  2. Das Verfahren nach Anspruch 1, weiter umfassend: Einfügen einer Vereinbarungsanweisung für die generierte Basisvariable in jedem Quellcodemodul, wobei die Vereinbarungsanweisung darauf hinweist, dass die generierte Basisvariable extern zu dem Quellcodemodul definiert ist.
  3. Das Verfahren nach Anspruch 1, weiter umfassend: Einfügen einer Vereinbarungsanweisung für die Kennzeichnungsvariable in jedem Quellcodemodul, wobei die Vereinbarungsanweisung darauf hinweist, dass die Kennzeichnungsvariable extern zu dem Quellcodemodul definiert ist.
  4. Das Verfahren nach Anspruch 1, weiter umfassend: Speichern des Namens der generierten Basisvariablen in einem Informationsdatenspeicher.
  5. Das Verfahren nach Anspruch 1, wobei das Zuweisen eines eindeutigen Wertes zu der Basisvariable weiter umfasst: Zuweisen des Wertes zu der Basisvariable, so dass der eindeutige Wert der Kennzeichnungsvariable an jedem Instrumentierungspunkt einen vordefinierten Bereich von Werten vermeidet.
  6. Ein System zur Instrumentierung eines Computerprogramms mit einer Vielzahl an Quellcodemodulen (600a, b, c, d), wobei das System umfasst. Mittel zum Erzeugen einer Basisvariablen (202) für jedes Quellcodemodul, mit einem Namen, der eindeutig für das Quellcodemodul ist; Mittel zum Erzeugen eines Versatzwertes (203) für jeden Instrumentierungspunkt in dem Quellcodemodul, der innerhalb des Quellcodemoduls für den Instrumentierungspunkt eindeutig ist; und Mittel zum Einfügen einer Kennzeichnungszuweisungsanweisung am Instrumentierungspunkt für jeden Instrumentierungspunkt in dem Quellcodemodul, die Kennzeichnungszuweisungsanweisung für das Setzen einer Kennzeichnungsvariablen (201) zu einer Kombination eines generierten Versatzwertes und eines Wertes einer Basisvariablen; und Mittel zum Kompilieren des instrumentierten Quellcodemoduls (604); Mittel zum Erzeugen einer Quellcodeanweisung für jede generierte Basisvariable, die die Basisvariable zu einem eindeutigen Wert setzt, so dass eine Kombination eines generierten Versatzwertes und eines Wertes einer Basisvariablen jeden Instrumentierungspunkt eindeutig identifiziert; Mittel zum Kompilieren der generierten Quellcodeanweisungen; und Mittel zum Verknüpfen der kompilierten instrumentierten Quellcodemodule mit den kompilierten generierten Quellcodeanweisungen, um ein verknüpftes Programm zu bilden, so dass während des Ausführens des verknüpften Programms die Kennzeichnungsvariable zu einem eindeutigen Wert an jedem Instrumentierungspunkt gesetzt wird.
  7. Das System nach Anspruch 6, wobei der Versatzkennzeichnungsinstrumentierer wenigstens eine Kennzeichnungsvariablen-Zuweisungsanweisung in einem ersten Quellcodemodul (701a) des Computerprogramms, befindlich auf dem ersten Computer (700a), einfügt und wenigstens eine andere Kennzeichnungsvariablen-Zuweisungsanweisung in einem zweiten Quellcodemodul (701b) des Computerprogramms, befindlich auf einem zweiten Computer (700b), einfügt
  8. Das System nach Anspruch 6, wobei der Kennzeichnungsversatzinstrumentierer jede Kennzeichnungszuweisungsanweisung in einem Instrumentierungsdatenspeicher registriert.
  9. Das System nach Anspruch 6, wobei der Basiswertauflöser einen Bereich von vorher zugewiesenen Werten für die Kennzeichnungsvariable abruft und den Basiswert so bestimmt, dass der Wert der Kennzeichnungsvariable an jeder Kennzeichnungsvariablen-Zuweisungsanweisung den Bereich von vorher zugewiesenen Werten für die Kennzeichnungsvariable vermeidet.
  10. Ein computerlesbarer Datenträger, der ein Computersystem zum Produzieren einer Vielzahl von einzigartigen Werten für eine Kennzeichnungsvariable (201) veranlasst, die für das Instrumentieren eines Computerprogramms verwendet wird, durch: für jedes Quellcodemodul; Erzeugen einer Basisvariablen (202) mit einem Namen, der eindeutig für das Quellcodemodul ist; für jeden Instrumentierungspunkt in dem Quellcodemodul, Erzeugen eines Versatzwertes (203), der innerhalb des Quellcodemoduls für den Instrumentierungspunkt eindeutig ist, und Einfügen einer Kennzeichnungszuweisungsanweisung an dem Instrumentierungspunkt, die Kennzeichnungszuweisungsanweisung für das Setzen einer Kennzeichnungsvariablen (201) zu einer Kombination des generierten Versatzwertes und eines Wertes einer Basisvariablen; und Kompilieren des instrumentierten Quellcodemoduls (604); für jede generierte Basisvariable, Erzeugen einer Quellcodeanweisung, die die Basisvariable zu einem eindeutigen Wert setzt, so dass eine Kombination eines generierten Versatzwertes und eines Wertes einer Basisvariablen jeden Instrumentierungspunkt eindeutig identifiziert; Kompilieren der generierten Quellcodeanweisungen; und Verknüpfen der kompilierten instrumentierten Quellcodemodule mit den kompilierten erzeugten Quellcodeanweisungen, um ein verknüpftes Programm zu bilden, so dass während des Ausführens des verknüpften Programms die Kennzeichnungsvariable zu einem eindeutigen Wert an jedem Instrumentierungspunkt gesetzt wird.
  11. Der computerlesbare Datenträger nach Anspruch 10, wobei die Kennzeichnungszuweisungsanweisung einen Kennzeichnungsversatzwert mit einem Kennzeichnungsbasiswert kombiniert.
  12. Der computerlesbare Datenträger nach Anspruch 10, wobei das Anpassen des Computerprogramms die Einrichtung des Kennzeichnungsbasiswertes beinhaltet.
  13. Der computerlesbare Datenträger nach Anspruch 10, wobei das Computerprogramm eine Vielzahl von Modulen enthält, die Kennzeichnungszuweisungsanweisung einen Kennzeichnungsversatzwert mit einem Kennzeichnungsbasiswert kombiniert, um den Wert so zu erzeugen, dass die Kombination jeden Instrumentierungspunkt eindeutig identifiziert und wobei ein Basiswert für jedes Modul eingerichtet wird, wenn das Computerprogramm angepasst wird.
  14. Der computerlesbare Datenträger nach Anspruch 10, wobei die Kennzeichnungszuweisungsanweisung die Kennzeichnungsvariable zu einem konstanten Wert setzt, und wobei das Anpassen des Computerprogramms den konstanten Wert für jede Kennzeichnungszuweisungsanweisung auf den eindeutigen Wert setzt.
DE69932371T 1998-01-29 1999-01-27 Verschiebbare Instrumentationskennzeichen für die Prüfung und die Fehlerbeseitigung eines Computerprogramms Expired - Fee Related DE69932371T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/015,256 US6106571A (en) 1998-01-29 1998-01-29 Relocatable instrumentation tags for testing and debugging a computer program
US15256 1998-01-29

Publications (2)

Publication Number Publication Date
DE69932371D1 DE69932371D1 (de) 2006-08-31
DE69932371T2 true DE69932371T2 (de) 2006-11-30

Family

ID=21770380

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69932371T Expired - Fee Related DE69932371T2 (de) 1998-01-29 1999-01-27 Verschiebbare Instrumentationskennzeichen für die Prüfung und die Fehlerbeseitigung eines Computerprogramms

Country Status (5)

Country Link
US (1) US6106571A (de)
EP (1) EP0933707B1 (de)
JP (2) JP4249309B2 (de)
AT (1) ATE333677T1 (de)
DE (1) DE69932371T2 (de)

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6311327B1 (en) 1998-03-02 2001-10-30 Applied Microsystems Corp. Method and apparatus for analyzing software in a language-independent manner
US6308315B1 (en) * 1998-10-14 2001-10-23 Sun Microsystems, Inc. System and method for automatically and selectively promoting object variables to method fields and variables in a digital computer system
US6973417B1 (en) * 1999-11-05 2005-12-06 Metrowerks Corporation Method and system for simulating execution of a target program in a simulated target system
US6745383B1 (en) * 1999-12-29 2004-06-01 Veritas Operating Corporation Early warning mechanism for enhancing enterprise availability
US7100152B1 (en) 2000-01-31 2006-08-29 Freescale Semiconductor, Inc. Software analysis system having an apparatus for selectively collecting analysis data from a target system executing software instrumented with tag statements and method for use thereof
US6996808B1 (en) * 2000-02-12 2006-02-07 Microsoft Corporation Function injector
US7409318B2 (en) * 2000-02-14 2008-08-05 Nextnine Ltd. Support network
EP1281121A2 (de) * 2000-02-14 2003-02-05 Nextnine Ltd. Eingebetteter einrichtungsüberwachungsagent
US7076400B2 (en) * 2000-02-14 2006-07-11 Nextnine Ltd. Support network
US6715141B1 (en) 2000-06-15 2004-03-30 Bruce Hodge Multiphase single pass interpreter
AU2000257401A1 (en) * 2000-06-15 2001-12-24 Bruce Hodge Multiphase single pass interpreter
US6961927B1 (en) * 2000-11-27 2005-11-01 Microsoft Corporation Lossless, context-free compression system and method
US6996810B2 (en) * 2001-12-13 2006-02-07 Hewlett-Packard Development Company, L.P. Lazy and precise update of unwind information for dynamically generated code
US6993750B2 (en) * 2001-12-13 2006-01-31 Hewlett-Packard Development Company, L.P. Dynamic registration of dynamically generated code and corresponding unwind information
US7484205B2 (en) * 2002-12-12 2009-01-27 Microsoft Corporation Preprocessor-based source code instrumentation
US7594234B1 (en) * 2004-06-04 2009-09-22 Sun Microsystems, Inc. Adaptive spin-then-block mutual exclusion in multi-threaded processing
US7644409B2 (en) * 2004-06-04 2010-01-05 Sun Microsystems, Inc. Techniques for accessing a shared resource using an improved synchronization mechanism
US7475397B1 (en) 2004-07-28 2009-01-06 Sun Microsystems, Inc. Methods and apparatus for providing a remote serialization guarantee
US8185868B1 (en) 2004-12-20 2012-05-22 The Mathworks, Inc. System and method for cell-based code editing and publishing
US7509244B1 (en) * 2004-12-22 2009-03-24 The Mathworks, Inc. Distributed model compilation
US8266608B2 (en) * 2005-02-18 2012-09-11 Green Hills Software, Inc. Post-compile instrumentation of object code for generating execution trace data
US9152531B2 (en) * 2005-02-18 2015-10-06 Green Hills Sofware, Inc. Post-compile instrumentation of object code for generating execution trace data
US7357332B2 (en) * 2005-04-29 2008-04-15 International Business Machines Corporation Providing diagnostic information on the processing of variables in source code
US7996442B2 (en) * 2005-10-17 2011-08-09 Oracle International Corporation Method and system for comparing and re-comparing data item definitions
JP4860240B2 (ja) * 2005-11-11 2012-01-25 パナソニック株式会社 翻訳方法および実行通知命令の埋め込み方法
US20070250810A1 (en) * 2006-04-20 2007-10-25 Tittizer Abigail A Systems and methods for managing data associated with computer code
US8370806B2 (en) * 2006-11-15 2013-02-05 Qualcomm Incorporated Non-intrusive, thread-selective, debugging method and system for a multi-thread digital signal processor
US8380966B2 (en) * 2006-11-15 2013-02-19 Qualcomm Incorporated Method and system for instruction stuffing operations during non-intrusive digital signal processor debugging
US8533530B2 (en) * 2006-11-15 2013-09-10 Qualcomm Incorporated Method and system for trusted/untrusted digital signal processor debugging operations
US8341604B2 (en) * 2006-11-15 2012-12-25 Qualcomm Incorporated Embedded trace macrocell for enhanced digital signal processor debugging operations
US8762956B1 (en) * 2007-01-31 2014-06-24 The Mathworks, Inc. Generating a report document from code
US8484516B2 (en) * 2007-04-11 2013-07-09 Qualcomm Incorporated Inter-thread trace alignment method and system for a multi-threaded processor
GB2451253A (en) * 2007-07-24 2009-01-28 Ezurio Ltd Indicating the position of a next declaration statement in object code when declaring a variable object code
US8381192B1 (en) * 2007-08-03 2013-02-19 Google Inc. Software testing using taint analysis and execution path alteration
US8589880B2 (en) * 2009-02-17 2013-11-19 International Business Machines Corporation Identifying a software developer based on debugging information
US8370354B2 (en) 2010-06-30 2013-02-05 International Business Machines Corporation Acceleration of legacy to service oriented (L2SOA) architecture renovations
US8978018B2 (en) 2010-12-02 2015-03-10 International Business Machines Corporation Reversibly instrumenting a computer software application
US20130179867A1 (en) * 2012-01-11 2013-07-11 International Business Machines Corporation Program Code Analysis System
US9274911B2 (en) 2013-02-21 2016-03-01 Advantest Corporation Using shared pins in a concurrent test execution environment
US9411708B2 (en) * 2013-04-12 2016-08-09 Wipro Limited Systems and methods for log generation and log obfuscation using SDKs
US9785542B2 (en) * 2013-04-16 2017-10-10 Advantest Corporation Implementing edit and update functionality within a development environment used to compile test plans for automated semiconductor device testing
US9785526B2 (en) 2013-04-30 2017-10-10 Advantest Corporation Automated generation of a test class pre-header from an interactive graphical user interface
US10269029B1 (en) 2013-06-25 2019-04-23 Amazon Technologies, Inc. Application monetization based on application and lifestyle fingerprinting
JP6481515B2 (ja) * 2015-05-29 2019-03-13 富士通株式会社 情報処理装置、コンパイル方法、及びコンパイラプログラム
US10558553B2 (en) * 2016-11-30 2020-02-11 International Business Machines Corporation Enabling non-blocking runtime application debugging for a single threaded server environment
US10346285B2 (en) * 2017-06-09 2019-07-09 Microsoft Technology Licensing, Llc Instrumentation of user actions in software applications
US10725894B2 (en) * 2017-10-04 2020-07-28 International Business Machines Corporation Measuring and improving test coverage
US20230229581A1 (en) * 2022-01-18 2023-07-20 International Business Machines Corporation Identifying regression test failures

Family Cites Families (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4144493A (en) * 1976-06-30 1979-03-13 International Business Machines Corporation Integrated circuit test structure
US4445192A (en) * 1980-11-25 1984-04-24 Hewlett-Packard Company Logic state analyzer with time and event count measurement between states
US4590581A (en) * 1983-05-09 1986-05-20 Valid Logic Systems, Inc. Method and apparatus for modeling systems of complex circuits
US5103394A (en) * 1984-04-30 1992-04-07 Hewlett-Packard Company Software performance analyzer
US4845615A (en) * 1984-04-30 1989-07-04 Hewlett-Packard Company Software performance analyzer
US4720778A (en) * 1985-01-31 1988-01-19 Hewlett Packard Company Software debugging analyzer
US4937740A (en) * 1985-09-18 1990-06-26 Cadre Technologies, Inc. Real time software analyzing system for storing selective m-bit addresses based upon correspondingly generated n-bit tags
US5047919A (en) * 1986-04-03 1991-09-10 Harris Corporation Method and apparatus for monitoring software execution in a parallel multiprocessor computer system
US5062055A (en) * 1986-09-02 1991-10-29 Digital Equipment Corporation Data processor performance advisor
US4849879A (en) * 1986-09-02 1989-07-18 Digital Equipment Corp Data processor performance advisor
GB2197506A (en) * 1986-10-27 1988-05-18 Burr Brown Ltd Providing and handling break points in a software monitor
US4811345A (en) * 1986-12-16 1989-03-07 Advanced Micro Devices, Inc. Methods and apparatus for providing a user oriented microprocessor test interface for a complex, single chip, general purpose central processing unit
US4989134A (en) * 1987-03-20 1991-01-29 Hewlett-Packard Company Method and apparatus for enhancing data storage efficiency
US4819233A (en) * 1987-04-08 1989-04-04 Westinghouse Electric Corp. Verification of computer software
US5329471A (en) * 1987-06-02 1994-07-12 Texas Instruments Incorporated Emulation devices, systems and methods utilizing state machines
US5006992A (en) * 1987-09-30 1991-04-09 Du Pont De Nemours And Company Process control system with reconfigurable expert rules and control modules
US4864569A (en) * 1987-11-25 1989-09-05 Westinghouse Electric Corp. Software verification and validation configuration management system
US5121489A (en) * 1988-08-02 1992-06-09 International Business Machines Corporation Tracing method for identifying program execution paths using a trace points bit map with one-to-one correspondence with embedded trace points
CN1045655A (zh) * 1988-11-23 1990-09-26 约翰弗兰克制造公司 系统自动诊断的内核测试接口和方法
US5134701A (en) * 1989-02-10 1992-07-28 Hewlett-Packard Co. Test apparatus performing runtime replacement of program instructions with breakpoint instructions for processor having multiple instruction fetch capabilities
CA1286803C (en) * 1989-02-28 1991-07-23 Benoit Nadeau-Dostie Serial testing technique for embedded memories
US5267277A (en) * 1989-11-02 1993-11-30 Combustion Engineering, Inc. Indicator system for advanced nuclear plant control complex
US5121501A (en) * 1989-12-27 1992-06-09 International Business Machines Corporation First processor inserting hooks into software and sending unique identifications to output bus and second processor associating data frames and time with these unique identifications
US5410685A (en) * 1990-06-12 1995-04-25 Regents Of The University Of Michigan Non-intrinsive method and system for recovering the state of a computer system and non-intrusive debugging method and system utilizing same
US5361351A (en) * 1990-09-21 1994-11-01 Hewlett-Packard Company System and method for supporting run-time data type identification of objects within a computer program
AU8966391A (en) * 1990-12-24 1992-06-25 Ball Corporation System for analysis of embedded computer systems
US5355369A (en) * 1991-04-26 1994-10-11 At&T Bell Laboratories High-speed integrated circuit testing with JTAG
US5321828A (en) * 1991-06-07 1994-06-14 Step Engineering High speed microcomputer in-circuit emulator
US5450586A (en) * 1991-08-14 1995-09-12 Hewlett-Packard Company System for analyzing and debugging embedded software through dynamic and interactive use of code markers
US5265254A (en) * 1991-08-14 1993-11-23 Hewlett-Packard Company System of debugging software through use of code markers inserted into spaces in the source code during and after compilation
US5259766A (en) * 1991-12-13 1993-11-09 Educational Testing Service Method and system for interactive computer science testing, anaylsis and feedback
AU4598593A (en) * 1992-06-05 1994-01-04 Convex Computer Corporation Computer program debugging in the presence of compiler synthesized variables
US5367683A (en) * 1992-06-26 1994-11-22 Digital Equipment Corporation Smart recompilation of performing matchup/difference after code generation
US5307498A (en) * 1992-12-04 1994-04-26 International Business Machines Corporation Automated method for adding hooks to software
US5408650A (en) * 1993-06-29 1995-04-18 Digital Equipment Corporation Memory analysis system for dynamically displaying memory allocation and de-allocation events associated with an application program
US5539907A (en) * 1994-03-01 1996-07-23 Digital Equipment Corporation System for monitoring computer system performance
US5553286A (en) * 1994-03-17 1996-09-03 International Business Machines Corporation System and method for preparing a computer program for execution
US5533192A (en) * 1994-04-21 1996-07-02 Apple Computer, Inc. Computer program debugging system and method
US5828884A (en) * 1996-05-23 1998-10-27 Advanced Micro Devices, Inc. Method for compiling a software program and executing on a system which converts data between different endian formats

Also Published As

Publication number Publication date
JPH11316696A (ja) 1999-11-16
JP4249309B2 (ja) 2009-04-02
DE69932371D1 (de) 2006-08-31
EP0933707A3 (de) 2004-04-14
EP0933707A2 (de) 1999-08-04
ATE333677T1 (de) 2006-08-15
EP0933707B1 (de) 2006-07-19
JP2006012193A (ja) 2006-01-12
US6106571A (en) 2000-08-22

Similar Documents

Publication Publication Date Title
DE69932371T2 (de) Verschiebbare Instrumentationskennzeichen für die Prüfung und die Fehlerbeseitigung eines Computerprogramms
DE60010420T2 (de) Automatisches Regressionstesten von Arbeitsplatz-Software
DE60021066T2 (de) Prüfung eines Softwarepakets
DE19836333C2 (de) Software Installation und Testen für ein gemäß einer Bestellung gebautes Computersystem
DE60001916T2 (de) Plattformunabhängige speicherabbild analysearchitektur zur programmfehlerbeseitigung
DE69831732T2 (de) Verfahren und gerät zum korrigieren von fehlern in einem rechnersystem
DE19836381C2 (de) Vorrichtung zur Installierung von Software auf einem Computersystem
DE112005001790B4 (de) Programmerstellungseinrichtung für eine programmierbare Steuervorrichtung, Programmerstellungsverfahren für eine programmierbare Steuervorrichtung und Aufzeichnungsmedium mit darauf aufgezeichnetem Programm
DE3842289C2 (de) Verfahren zur Entwicklung von Programmen für ein verteiltes Datenverarbeitungssystem
EP1723513B1 (de) Verfahren zur konfiguration eines computerprogramms
DE19959758A1 (de) Bestimmung der Art und der Genauigkeit von lokalen Variablen bei vorhandenen Subroutinen
DE102004057021A1 (de) Verfahren und System zum Testen eines Computersystems durch ein Anlegen einer Last
DE10348591A1 (de) Automatically identifying a program error in a computer program
DE102011014830A1 (de) Verfahren und vorrichtung zum analysieren vonsoftware
DE10127170A1 (de) Fehlersuchverfahren und Fehlersuchvorrichtung
DE03012184T1 (de) Prozessor, Informationsverarbeitungsgerät, Kompiliervorrichtung, und Kompilierverfahren mittels dieses Prozessors
DE102014102551A1 (de) Maschine und Verfahren zum Evaluieren von fehlschlagenden Softwareprogrammen
DE102006040794A1 (de) Softwareprogramm mit alternativen Funktionsbibliotheken
DE112018002316T5 (de) Codeabdeckungsverfolgung für ein mikrocontroller-programm
DE60021092T2 (de) Vorrichtung und Verfahren zur Echtzeitfehlerbeseitigung von Quellprogrammen, insbesondere für DSP
DE10213009A1 (de) Verfahren zum elektronischen Testen von Speichermodulen
DE19901879A1 (de) Verfahren zum Tracen von Daten
DE60213786T2 (de) System und verfahren zur automatischen erfassung von aussagen in einer java-kompatibilitätsprüfumgebung
DE10324384B3 (de) Behandlung eines Fehlerereignisses bei der Installation eines Anwendungsprogramms in einem tragbaren Datenträger
EP0708941B1 (de) Verfahren zum test eines objektorientierten programms

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee