DE69712986T2 - Programmentwicklungssystem - Google Patents
ProgrammentwicklungssystemInfo
- Publication number
- DE69712986T2 DE69712986T2 DE69712986T DE69712986T DE69712986T2 DE 69712986 T2 DE69712986 T2 DE 69712986T2 DE 69712986 T DE69712986 T DE 69712986T DE 69712986 T DE69712986 T DE 69712986T DE 69712986 T2 DE69712986 T2 DE 69712986T2
- Authority
- DE
- Germany
- Prior art keywords
- variable
- unit
- line
- information
- source code
- 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
Links
- 238000005457 optimization Methods 0.000 claims description 144
- 230000009466 transformation Effects 0.000 claims description 73
- 230000006870 function Effects 0.000 claims description 52
- 238000000034 method Methods 0.000 claims description 48
- 230000014509 gene expression Effects 0.000 claims description 46
- 230000008569 process Effects 0.000 claims description 30
- 238000012217 deletion Methods 0.000 claims description 27
- 230000037430 deletion Effects 0.000 claims description 27
- 238000013507 mapping Methods 0.000 claims description 25
- 238000013024 troubleshooting Methods 0.000 claims description 20
- 238000012360 testing method Methods 0.000 claims description 9
- 239000000284 extract Substances 0.000 claims description 2
- 238000001514 detection method Methods 0.000 claims 12
- 238000011990 functional testing Methods 0.000 claims 2
- 238000002372 labelling Methods 0.000 claims 1
- 238000006467 substitution reaction Methods 0.000 description 58
- 238000012545 processing Methods 0.000 description 46
- 238000012546 transfer Methods 0.000 description 17
- 238000007689 inspection Methods 0.000 description 9
- 230000008859 change Effects 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 7
- 238000011161 development Methods 0.000 description 7
- 238000002910 structure generation Methods 0.000 description 7
- 238000012795 verification Methods 0.000 description 6
- 238000006243 chemical reaction Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000004913 activation Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 238000010276 construction Methods 0.000 description 3
- 230000010365 information processing Effects 0.000 description 3
- 238000013468 resource allocation Methods 0.000 description 3
- 239000011800 void material Substances 0.000 description 3
- 238000011835 investigation Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000000994 depressogenic effect Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/28—Error detection; Error correction; Monitoring by checking the correct order of processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Description
- Programmentwicklungssystem, das aus einer Fehlersuchinformations- Erzeugungsvorrichtung besteht, sich auf den Optimierungsprozess beziehend, um Fehlersuchinformationen zu erzeugen, um eine Operationsverifikation zu ermöglichen, und auf eine Fehlersuchvorrichtung, die eine Operationsverifikation durchführen kann, während der Programmierer über den Optimierungsprozess in Kenntnis gesetzt wird.
- Die vorliegende Erfindung bezieht sich auf ein Programmentwicklungssystem, das aus einer Fehlersuchvorrichtung aufgebaut ist, die, während einer Softwareentwicklung, prüfen kann, dass der Ausführungscode, erzeugt durch eine Programmkonversionsvorrichtung, so arbeitet, wie vorgesehen ist, und die schnell irgendwelche Fehler, die in einem solchen Code vorhanden sind, entdecken kann, und auf eine Fehlersuchinformations- Erzeugungsvorrichtung zum Erzeugen von Fehlersuchinformationen für die Fehlersuchvorrichtung.
- In den vergangenen Jahren sind Modelländerungen für eine Informationsverarbeitungsausrüstung, wie beispielsweise Wortprozessoren, Heimcomputer und elektronischen Notebooks und für elektrische Geräte für zu Hause, wie beispielsweise Videos, Fernsehgeräte und Gefrierschränke, sehr häufig geworden. Demzufolge ist die Entwicklungsperiode für eine solche Informationsverarbeitungsausrüstung für elektrische Geräte für zu Hause sehr kurz geworden, um solche schnellen Modelländerungen zu ermöglichen. Als Folge stehen Hersteller fortlaufend unter einem hohen Druck, die Entwicklung von neuen Produkten in einer solchen kurzen Zeit abzuschließen. Andererseits gilt die Installation von Mikrocomputern in einer solchen Informationsverarbeitungsausrüstung und in Haushaltsgeräten als beschlossen, so dass die schnelle Entwicklung eines Steuerprogramms für die eingebundenen Mikrocomputer eine wesentliche Aufgabe für die Techniker jedes Herstellers geworden ist.
- Bei der vorliegenden Situation wird eine erhöhte Aufmerksamkeit der Schaffung einer "Hochniveau-, sprach-orientierten Entwicklungsumgebung" zum Herstellen einer Steuersoftware gerichtet. Dies bezieht sich auf eine Entwicklungsumgebung, bei der alle Prozesse von dem Codieren des Programms bis zu dem Testen bei einer tatsächlichen Anwendung unter Verwendung einer Hochniveau-Sprache durchgeführt werden können. Hierbei ist der Schlüssel zu dem Erzielen einer solchen Entwicklungsumgebung die Erzeugung von Fehlersuchinformationen, um zu ermöglichen, dass eine Operationsverifikation durch eine Fehlersuchvorrichtung unter Verwendung der Sprache mit hohem Niveau durchgeführt werden kann.
- Fehlersuchinformationen ist ein allgemeiner Name, der allen Informationen gegeben ist, die die Korrespondenz zwischen einem Programm, geschrieben als die Original- Quellencode-Angaben, und dem Programm in seinem Ausführungs-Code-Zustand ausdrückt. Repräsentative Beispiele von Fehlersuchinformationen sind Zeilenadresseninformationen, die die Korrespondenz zwischen jeder Zeile in den Quellencode-Angaben und den Adressen in dem Ausführungscode dargestellt sind, und Zuordnungsinformationen, die die Korrespondenz zwischen den Variablen in dem Quellencode und den Registern und den Speicheradressen, verwendet durch den Ausführungscode, darstellen. Mit solchen Zuordnungsinformationen wird, falls eine Korrespondenz klar zwischen jeder der Variablen eingerichtet ist, die frei durch den Programmierer definiert sind und entsprechend einem Erfordernis verwendet werden, und jeder Hardware-Resource, wie beispielsweise einer Register- oder Speicheradresse, der Programmierer in der Lage sein, die Korrespondenz zwischen dem Programm, geschrieben durch ihn, und dem Ausführungscode zu kontrollieren.
- Das Nachfolgende ist eine Erläuterung, unter Bezugnahme auf Fig. 1, des Aufbaus einer herkömmlichen Fehlersuchvorrichtung, die die Art von Fehlersuchinformationen verwendet, die vorstehend beschrieben ist.
- Die Fehlersuchvorrichtung, dargestellt in Fig. 1, ist aus einer Programmspeichereinheit 301, einer Speichereinheit 302 für einen erzeugten Code, einer Optimierungsinformations- Speichereinheit 303, einer Fehlersuchinformations-Speichereinheit 304, einer Eingabeeinheit 401, einer Codeausführungseinheit 402, einer Variable-Operationseinheit 403, einer Ausgabeeinheit 404 und einer Zeilenanzeigeeinheit 405 aufgebaut.
- Die Programmspeichereinheit 301 speichert ein Programm, das durch Techniker unter Verwendung einer höheren Programmiersprache geschrieben ist.
- Die Speichereinheit 302 für den erzeugten Code speichert den erzeugten Ausführungscode.
- Die Optimierungsinformations-Speichereinheit 303 speichert die Zuordnungsinformationen für das Programm, das in der Programmspeichereinheit 301 gespeichert ist.
- Die Fehlersuchinformations-Speichereinheit 304 ist aus einer Zeilenadressenspeichereinheit 3041, die die Korrespondenz zwischen den Zeilen in dem Programm und den Adressen des Ausführungscodes darstellt, und einer Funktionsinformations-Speichereinheit 3042, die Funktionsinformationen ausdrückt, aufgebaut. Diese Funktionsinformationen in der Funktionsinformations-Speichereinheit 3042 umfasst eine Startadresse für eine Funktion, die Namen und Formen der Argumente und der Variablen der Funktion und, wenn eine Variable in dem Stapelspeicher gehalten ist, einen Offset-Wert für den Stapelspeicher.
- Die Eingabeeinheit 401 empfängt Indikationen von Variablen, deren Werte durch einen Benutzer eingestellt werden sollen, und von Variablen, auf deren gespeicherte Werte Bezug genommen werden soll.
- Die Codeausführungseinheit 402 führt den Ausführungscode aus, den sie von der Speichereinheit 302 für den erzeugten Code empfängt.
- Die Variable-Operationseinheit 403 empfängt die Zuordnungsinformationen für eine Variable, angezeigt durch die Eingabeeinheit 401, von der Optimierungsinformations- Speichereinheit 303 und der Fehlersuchinformations-Speichereinheit und bestimmt, welcher Resource die angezeigte Variable zugeordnet worden ist. Hierbei bezieht sich "Resourcen" auf die Register oder Stapelspeicheradressen in dem Ausführungscode, die zugeordnet worden sind, um die Variablen auszudrücken. Indem die Resource so bestimmt wurde, wie dies vorstehend beschrieben ist, fragt die Variable-Operationseinheit 403 die Codeausführungseinheit 402 nach dem Wert der Resource. Nachdem der Wert der Resource empfangen ist, besitzt die Variable-Operationseinheit 403 die Variable und deren Wert angezeigt durch die Ausgabeeinheit 404.
- Die Zeilenanzeigeeinheit 405 empfängt das Programm von der Programmspeichereinheit 301 und zeigt die Funktion an, die die Halte-Linie umfasst.
- Das Folgende ist eine Erläuterung der Betriebsweise der Fehlersuchvorrichtung mit dem Aufbau, der vorstehend beschrieben ist. Der Inhalt der Programmspeichereinheit 301 ist in Fig. 2A dargestellt. Der Inhalt der Speichereinheit 302 für den erzeugten Code ist in Fig. 2B dargestellt. Der Inhalt der Fehlersuchinformations-Speichereinheit 304 ist in Fig. 2C dargestellt. Der Inhalt der Optimierungsinformations-Speichereinheit 303 ist in Fig. 2D dargestellt.
- Wenn die Fehlersuchvorrichtung aktiviert ist, zeigt die Zeilenanzeigeeinheit 405 das Programm in Funktionseinheiten an, und die Eingabeeinheit 401 zeigt die Befehlszeile an und wartet auf eine Benutzereingabe. Falls in diesem Wartezustand der Benutzer einen Befehl eingibt, der eine Referenz des Werts der Variablen z auf der zehnten Zeile angibt (siehe Fig. 3A), durchsucht die Variable-Speichereinheit 403 die Zeilenadressenspeichereinheit 3041 und findet die Adresse, die der Zeile 10 entspricht. Für den beispielhaften Inhalt der Zeilenadressenspeichereinheit 3041, dargestellt in Fig. 2C, entspricht die Zeile 10 der Adresse "0x128". Wenn einmal eingerichtet ist, dass Zeile 10 der Adresse "0x128" entspricht, wird die Codeausführungseinheit 402 angewiesen, einen Unterbrechungspunkt bei der Adresse "0x128" einzustellen, und die Zeilenanzeigeeinheit 405 wird angewiesen, Zeile 10 mit einem Pfeil anzuzeigen. Durch Anzeigen eines solchen Pfeils wird der Benutzer über eine Ausführung des Programms bis zu Zeile 10 informiert (siehe Fig. 3B). Die Codeausführungseinheit 403 führt dann den Ausführungscode, gespeichert in der Speichereinheit 302 für den erzeugten Code, bis zu der Adresse "0x128" aus, die als Unterbrechungspunkt eingestellt ist. Wenn einmal der Ausführungscode bis zu der Adresse "0x128" ausgeführt worden ist, durchsucht die Variable-Operationseinheit 403 die Optimierungsinformations-Speichereinheit 303 und bestimmt, welche Resource der angezeigten Variablen z zugeordnet worden ist. Für den beispielhaften Inhalt der Optimierungsinformations- Speichereinheit 303, dargestellt in Fig. 2D, ist die Resource, die der angezeigten Variablen z zugeordnet ist, das Register D3. Dementsprechend erhält die Variable-Operationseinheit 403 dieses Register D3 von der Optimierungsinformations-Speichereinheit 303 und instruiert die Codeausführungseinheit 402, den Wert des Registers D3 zu lesen. Indem sie so instruiert ist, liest die Codeausführungseinheit 402 den gespeicherten Wert "10" von dem Datenregister D3 und die Variable-Operationsseinheit 403 instruiert die Ausgabeeinheit 404, den gelesenen Wert "10" als den gespeicherten Wert der Variablen z auszugeben. Indem sie so instruiert wird, zeigt die Ausgabeeinheit 404 den Variable-Namen der Variablen z zusammen mit dem gespeicherten Wert "10" an (siehe Fig. 3C).
- Wie vorstehend beschrieben ist, gibt der Benutzer einen Variable-Namen ein und die Resource, zu der die eingegebene Variable zugeordnet ist, wird unter Verwendung der Variable-Resource-Korrespondenz-Informationen bestimmt. Hierauf folgend gibt die Codeausführungseinheit den Wert der Resource aus, so dass der Benutzer den Wert jeder Variablen kennen kann, wenn das Programm in seinem Ausführungs-Code-Zustand auf der vorgesehenen Maschine ausgeführt wird.
- Der Nachteil solcher Fehlersuchvorrichtungen, die die Effektivität einer Programmentwicklung unter Verwendung einer Korrespondenz zwischen Variablen und Resourcen verbessert, liegt in deren Unfähigkeit, dem Benutzer den Inhalt der Optimierung, ausgeführt innerhalb der Programm-Konversionseinheit, darzustellen, so dass dann, wenn das Programm umfangreich durch die interne Verarbeitung der Programm-Konversionseinheit umgeschrieben ist, der Benutzer eine umfangreiche Zeit benötigt, um sein Programm, das umgeschrieben worden ist, zu erfassen.
- Zum Beispiel wird, wenn es ein Benutzer wünscht, den Wert einer Variablen zu ändern, falls ein Unterausdruck, der die in Rede stehende Variable enthält, in eine temporäre Variable umgeschrieben wird, wie beispielsweise eine Änderung im Wert, es nicht möglich sein, dass der Benutzer die Korrespondenz zwischen der temporären Variablen und dem originalen Unterausdruck aufnehmen kann. Hierbei ist, wenn der Benutzer versucht, den Wert einer Variablen ohne ein entsprechendes Verständnis der Korrespondenz zwischen der temporären Variablen und dem Unterausdruck zu ändern, dabei die Gefahr, dass die Änderung der Variablen zu einer fehlerhaften Operation durch das Programm führen kann. Ein neues Fehlersuchverfahren ist durch die japanische, offengelegte Patentanmeldung 6- 274369 offenbart worden. Bei diesem Verfahren ist die Programmkonversionsvorrichtung so aufgebaut, um die Änderungen in Quellencode-Angaben vor und nach einer Optimierung zu analysieren und um Informationen zu erzeugen, die das Fortschreiten dieser Änderungen darstellen. Genauer gesagt analysiert, wenn dort eine Variable in den Quellencode-Angaben vorhanden ist, die in eine unterschiedliche Variable umgeschrieben ist, die Programmkonversionsvorrichtung, welche Resource der umgeschriebenen Variablen zugeordnet worden ist, und erzeugt Informationen, die "Vor-Ersetzungs-Variable-Resource" Paarungen darstellen.
- Als Beispiel wird, wenn der Unterausdruck "2*n" in der Quellencode-Angabe "s=s+2*n" durch die Variable "n1" während einer Optimierung ersetzt wird, eine Analyse durchgeführt, um die Resource zu finden, die der substituierten Variablen n1 zugeordnet worden ist. Falls das Ergebnis eine Resource R6 ist, werden Informationen erzeugt, die zeigen, dass die Variable "n" in. dem momentanen Operationsausdruck als "R612" ausgedrückt ist. Ein anderes Beispiel eines Fehlersuchverfahrens nach dem Stand der Technik ist in Gary Brooks et al. "A New Approach to Debugging Optimised Code", ACM SIGRAN Notices, vol. 27, No. 7, Juli 1992, New York, US, Seiten 1-11, offenbart. Dort ist eine Compiler- Debugger-Interface (CDI) vorgesehen, die die Effekte von Optimierungen in Bezug auf das Verhalten eines Programms durch Vorsehen einer visuellen Rückführung in der Form von einem farblich hervorgehobenen Programmtext mit hohem Niveau fördert unter Verwendung einer feineren Quellengranularität als das Angabe-Niveau. Eine Farbhervorhebung kann durch eine Kasten- oder Rahmenbildung, ein Reverse-Video, eine Unterstreichung, oder eine Verwendung von mehreren Schriftzeichensätzen erfolgen. Basierend auf dem visuellen Feedback kann ein Benutzer intelligente Fragen über den Programmzustand vornehmen und auf ein erwartetes Verhalten schließen (z. B. auf den Wert einer Variablen schließen), und eine Einsicht in das tatsächliche Verhalten eines zusammengestellten Programms erhalten.
- Allerdings sind die "Vor-Ersetzungs-Variable-Resource" ("Pre-Replacement Variable- Resource") oder "das Format eines Ausdrucks umfassend die Variable und die Resource" ("Format of Expression Including the Variable and Resource") Informationen des Verfahrens, das in der japanischen, offengelegten Patentanmeldung 6-274369 offenbart ist, noch nicht in der Lage gewesen, vollständig die Details der komplexen Optimierungsprozesse auszudrücken, die das Quellenprogramm umschreiben, wie beispielsweise "Ersetzung von Variablen", "Löschen von Zeilen" und "Bewegung von Zeilen".
- Die interne Verarbeitung der Optimierung ist aus Kombinationen von fundamentalen Algorithmen, wie beispielsweise das Löschen von Quellencode-Angaben, die Bewegung von Quellencode-Angaben und die Substitution, Bewegung, oder Löschung von Variablen, aufgebaut. Hierbei erzeugt die Programmkonversionsvorrichtung temporär Variable entsprechend ihren Erfordernissen, die dann dazu verwendet werden, eine Optimierung durchzuführen. Für die herkömmlichen Fehlersuchverfahren werden andererseits, wenn die Variablen in Quellencode-Angaben durch andere Variablen während einer Optimierung ersetzt werden und andere Quellencode-Angaben gelöscht oder nach einem solchen Ersetzen bewegt werden, die "Vor-Ersetzungs-Variable-Resource" Informationen und die "Format eines Ausdrucks, umfassend die Variable und die Resource" Informationen basierend auf dem Programm in seinem Endzustand, erzeugt, nachdem alle diese Optimierungsvorgänge durchgeführt worden sind.
- Wenn das Ersetzen von Variablen und das Kombinieren von Zeilen relativ einfach ist, ist es wahrscheinlich der Verdienst des Technikers, während die erzeugten Informationen angesehen werden, allerdings wenn das Ersetzen und Kombinieren von Zeilen komplexer ist, wird es schwierig, die Details der erzeugten Informationen zu erfassen, was die Arbeitsbelastung der Techniker erhöht.
- Es ist möglich, eine Standardisierung des Verfahrens zum Ausdrücken von Fehlersuchinformationen vorzusehen, um die Details der Prozesse, vorgenommen durch etablierte, ausreichend bekannte Optimierungsverfahren, wie beispielsweise "Kopie-Propagation", "Konstante-Propagation" oder durch irgendein anderes, neuartiges Optimierungsverfahren, auszudrücken. Allerdings werden solche neuen Optimierungsverfahren fortlaufend entwickelt und eingeführt, so dass gerade dann, wenn ein Verfahren zum Ausdrücken von Fehlersuchinformationen für etablierte Optimierungsverfahren oder Optimierungsverfahren, die derzeit die Aufmerksamkeit auf sich ziehen, standardisiert werden, dabei die Gefahr vorhanden, dass ein solcher Standard in Bezug auf irgendwelche neuen Verfahren, die entwickelt werden, nicht zeitgemäß sein würde.
- Die erste Aufgabe der vorliegenden Erfindung ist es, eine Fehlersuchinformations- Erzeugungsvorrichtung zu schaffen, die akkurat sogar komplexe Optimierungsprozesse ausdrücken kann, die Kombinationen von fundamentalen Algorithmen sind, wie beispielsweise Zeilenlöschen, Variable-Ersetzung, Variable-Bewegung und Variable-Löschung. Die zweite Aufgabe der vorliegenden Erfindung ist es, eine Fehlersuchinformations- Erzeugungsvorrichtung zu schaffen, die die Erweiterung der Darstellung von Optimierungsprozessen so ermöglicht, dass gerade dann, wenn eine Programmkonversionsvorrichtung ein neues Optimierungsverfahren durchführen sollte, das aus einer Kombination der fundamentalen Algorithmen aufgebaut ist, die nämlich Zeilenlöschen, Variable- Ersetzen, Variable-Bewegung und Variable-Löschen sind, die Fehlersuchinformations- Erzeugungsvorrichtung noch in der Lage sein wird, das neue Optimierungsverfahren als eine solche Kombination auszudrücken.
- Die erste und die zweite Aufgabe der vorliegenden Erfindung können durch eine Fehlersuchinformations-Erzeugungsvorrichtung gelöst werden, die die technischen Merkmale aufweist, die in dem beigefügten Anspruch 1 angegeben sind, die eine Zusammenstellung einer Quellendatei, aufgebaut aus einer Mehrzahl von Quellencode-Angaben, überwacht, und die Informationen für eine Fehlersuche erzeugt.
- Für den vorstehenden Aufbau beurteilt, wenn eine komplexe Optimierung, die eine Kombination eines Zeilenlöschens, eines Variable-Ersetzens, einer Variable-Bewegung ist, und der Variable-Lösch-Algorithmus in einer Programmentwicklungsumgebung durchgeführt wird, die Beurteilungseinrichtung, ob jede der vorbestimmten Editierfunktionen durchgeführt worden ist, und die Erzeugungseinrichtung erzeugt dann geeignete Sätze von Transformationsinformationen. Indem eine erste Beurteilungs- bzw. Feststelleinrichtung den Optimierungsvorgang auf diese Art und Weise überwacht, können die Optimierungsvorgänge, durchgeführt in Bezug auf die internen Ausdrücke, akkurat ausgedrückt werden. Als Folge können Optimierungsverfahren, aufgebaut aus Kombinationen der fundamentalen Algorithmen, eines Zeilenlöschens, eines Variable-Ersetzens, einer Variable- Bewegung und eines Variablenlöschens, akkurat ausgedrückt werden.
- Die erste Feststelleinrichtung kann umfassen: eine erste Feststelleinrichtung, die feststellt, ob eine erste Editierfunktion, bei der eine Variable in einer Quellencode-Anweisung durch eine andere Variable oder eine Konstante ersetzt wird, während der Optimierung vollzogen worden ist; eine zweite Feststelleinheit, die feststellt, ob eine zweite Editierfunktion, bei der ein Teilausdruck in einer Quellencode-Anweisung durch eine andere Variable oder eine Konstante ersetzt wird, während der Optimierung vollzogen worden ist; eine dritte Feststelleinheit, die feststellt, ob eine dritte Editierfunktion, bei der eine Quellencode- Anweisung auf eine andere Zeile verschoben wird, während der Optimierung vollzogen worden ist; und eine vierte Feststelleinheit, die feststellt, ob eine vierte Editierfunktion, bei der eine Quellencode-Anweisung gelöscht wird, während der Optimierung vollzogen worden ist, und wobei die Erzeugungseinrichtung enthält: eine erste Erzeugungseinheit, die, wenn festgestellt wird, dass der erste Editiervorgang vollzogen worden ist, einen Satz Transformationsinformationen vom Typ 1 erzeugt, der eine Zeilenzahl einer Zeile, auf der die entsprechende Quellencode-Anweisung vorhanden ist, einen Namen der ersetzten Variablen für die Variable, die ersetzt wird, eine ersetzende Konstante oder eine ersetzende Variable nach dem Ersetzen und Identifizierungsinformationen enthält, die zeigen, dass Ersetzen vollzogen wird; eine zweite Erzeugungseinheit, die, wenn festgestellt wird, dass der zweite Editiervorgang vollzogen worden ist, einen Satz Transformationsinformationen vom Typ 2 erzeugt, der eine Zeilenzahl einer Zeile, auf der die entsprechende Quellencode-Anweisung vorhanden ist, einen ersetzten Teilausdruck, der ersetzt wird, eine ersetzende Konstante oder eine ersetzende Variable nach dem Ersetzen und Identifizierungsinformationen enthält, die zeigen, dass Ersetzen vollzogen wird; eine dritte Erzeugungseinheit, die, wenn festgestellt wird, dass der dritte Editiervorgang vollzogen worden ist, einen Satz Transformationsinformationen vom Typ 3 erzeugt, der eine Ursprungszeilenzahl, bei der es sich um eine Zeilenzahl einer Zeile handelt, auf der die Quellencode- Anweisung ursprünglich vorhanden war, eine Ziel-Zeilenzahl, bei der es sich um eine Zeilenzahl einer Zeile handelt, auf die die Quellencode-Anweisung verschoben worden ist, und Identifizierungsinformationen enthält, die zeigen, dass Verschieben vollzogen wird; und eine vierte Erzeugungseinheit, die, wenn festgestellt wird, dass der vierte Editiervorgang vollzogen worden ist, einen Satz Transformationsinformationen vom Typ 4 erzeugt, der eine Zeilenzahl einer Zeile, auf der die Quellencode-Anweisung ursprünglich vorhanden war, und Identifizierungsinformationen enthält, die zeigen, dass Löschen ausgeführt wird.
- Mit dem vorstehenden Aufbau sind der erste bis vierte Editiervorgang, nämlich das Ersetzen einer Variablen, das Ersetzen eines Ausdrucks, die Bewegung einer Zeile und das Löschen einer Zeile, Vorgänge, die sowohl in ausreichend bekannten Optimierungsvorgängen, wie beispielsweise "Kopie-Propagation" oder "Konstante-Propagation", als auch in den Optimierungsvorgängen, denen derzeit sehr viel Aufmerksamkeit geschenkt wird, durchgeführt werden, so dass die Optimierungsvorgänge als Kombination von Editierfunktionen ausgedrückt werden können, was die Darstellung von neuen Optimierungsvorgängen möglich macht. Dies führt zu einer universellen Form eines Ausdrucks für Optimierungsvorgänge. Indem dies so vorgenommen wird, ist es einfach, neue Optimierungsvorgänge zu registrieren und die Informationen, aufgezeichnet in der Fehlersuchvorrichtung, zu ändern.
- Gemäß einem anderen Aspekt schafft die vorliegende Erfindung eine Suchvorrichtung, wie sie im Detail in dem beigefügten Anspruch 4 angegeben ist, zum Ausführen einer Operationsverifikation eines Maschinensprachprogramms, das durch das Kompilieren einer Quellendatei erzeugt worden ist, die aus einer Vielzahl von Quellencode-Anweisungen besteht, wobei die Quellendatei vorgegebenen Editiervorgängen unterzogen wird, nachdem sie zunächst beim Kompilieren in inneren Ausdruck umgewandelt worden ist, wobei die Fehlersuchvorrichtung umfasst: eine Transformationsinformations-Speichereinrichtung, die Sätze von Transformationsinformationen speichert, die jeweils eine Transformation zeigen, die durch einen der Editiervorgänge bewirkt wurde, wobei jeder der Sätze von Transformationsinformationen aus einer Zeilenzahl einer Zeile, die eine Quellencode- Anweisung enthält, die Code entspricht, der einem Editiervorgang unterzogen wurde, einem Editiervorgangs-Inhalt und ein Paar von Coden vor und nach dem Ausführen des Editiervorgangs besteht;
- eine Befehls-Empfangseinrichtung, die einen Fehlersuchbefehl empfängt, bei dem es sich um einen Befehl zum Prüfen der Funktion des Maschinensprachenprogramms handelt, das durch das Kompilieren erzeugt wurde;
- eine Analysiereinrichtung, die einen Inhalt des Fehlersuchbefehls interpretiert, und, wenn der Fehlersuchbefehl eine Anzeige für einen Satz Code vor dem Durchführen eines Editiervorgangs enthält; Details einer Transformation des Satzes Code aufgrund des Durchführens des Editiervorgangs auf der Grundlage aller Transformationsinformationen analysiert, die den Satz Code enthalten;
- eine erste Bildanzeigeeinrichtung, die die Einzelheiten der von der Analysiereinrichtung analysierten Transformation anzeigt; und
- eine Funktions-Prüfeinrichtung, die sich auf die Details der Transformation bezieht, die von der Analysiereinrichtung analysiert wurde, und Sätze von Ausführungscode aus allen Sätzen von Ausführungscode in dem Maschinensprachenprogramm erfasst, die sich auf den Fehlersuchbefehl beziehen, und Funktionsprüfung vollzieht.
- Wenn das kompilierte Maschinen-Sprachprogramm nach Fehlern durchsucht wird, interpretiert die Fehlersuchvorrichtung die Inhalte des Fehlersuchbefehls, und wenn ein Voreditiercode durch den Fehlersuchbefehl angezeigt ist, werden die Details der Transformation während eines Editierens des Voreditiercodes von allen Transformationsinformationen aufgefunden, die den in Rede stehenden Code umfassen. Nachdem solche Details analysiert worden sind, zeigt die erste Anzeigeeinrichtung die analysierten Details an, so dass gerade dann, wenn die originalen Quellencode-Angaben stark umgeschrieben worden sind, der Programmentwickler in der Lage sein wird, zu verstehen, wie sein Programm während einer Optimierung umgeschrieben worden ist. Indem dies so vorgenommen wird, wird der Programmentwickler bald nicht durch die Optimierung des Programms auf Hindernisse stoßen und wird in der Lage sein, die Operationsverifikation des Maschinensprachprogramms durchzuführen, während er sich über die Quellencode-Angaben, geschrieben in einer Programmiersprache unter hohem Niveau, bewußt ist.
- Auch kann die Fehlersuchvorrichtung weiterhin umfassen: eine Transformations- Informations-Speichereinrichtung zum Speichern von Transformationsinformationen von Typ 1 bis Typ 4, erzeugt durch die erste bis vierte Erzeugungseinheit; und eine Zuordnungsinformations-Speichereinrichtung zum Speichern von Sätzen von Zuordnungsinformationen, jede aufgebaut aus Paaren einer Zahl einer Zeile, wobei eine Quellencode- Angabe vorhanden ist, und einer variablen Namen-Resource-Namen-Beziehung, die ausdrückt, welche Hardware-Resource welcher Variablen in welcher Quellencode-Angabe zugeordnet worden ist, wobei die Analysiereinrichtung umfassen kann: eine erste Interpretiereinheit, die eine Anzeige eines Variable-Namens interpretiert, der in dem Fehlersuchbefehl enthalten ist, dessen gespeicherter Wert zu lesen ist; eine erste Erfassungseinheit, die die von der ersten Interpretiereinheit interpretierte Variable erfasst, wenn die Variable durch einen Satz Transformationsinformationen vom Typ 1 oder einen Satz Transformationsinformationen vom Typ 2, der von der Transformationsinformations- Speichereinrichtung gespeichert wird, als eine ersetzte Variable oder eine ersetzende Variable angezeigt wird; eine zweite Erfassungseinheit, die jeden in der Zuordnungsinformations-Speichereinheit gespeicherten Satz Zuordnungsinformationen erfasst, der eine ersetzende Variable enthält, die in dem durch die erste Erfassungseinheit erfassten Satz Transformationsinformationen enthalten ist; eine Kombiniereinheit, die einen neuen Satz Zuordnungsinformationen, der aus einer ersetzen Variable und einer ersetzenden Variable in dem durch die erste Erfassungseinheit erfassten Satz von Transformationsinformationen besteht und einen Resourcennamen in dem durch die zweite Erfassungseinheit erfassten Satz von Zuordnungsinformationen kombiniert; und eine Leseeinheit, die, wenn er in einem Lesekommando enthalten ist, einen durch den Resourcennamen angezeigten Wert einer Hardware-Resource liest, der in dem neuen Satz Zuordnungsinformationen enthalten ist,
- und wobei die erste Anzeigeeinrichtung eine erste Anzeigeeinheit enthält, die, wenn ein Lesevorgang einer Hardware-Resource ausgeführt worden ist, eine Meldung anzeigt, dass die ersetzte Variable durch die ersetzende Variable ersetzt worden ist, und dass sowohl die ersetzte Variable als auch die ersetzende Variable den aus der Hardware-Resource gelesenen Wert haben.
- Mit dem vorstehenden Aufbau zeigt, wenn der Benutzer eine ersetzte Variable anzeigt, anstelle nur eines Versuchens, den Wert der Variable zu lesen, das System eine Nachricht an, die das Ersetzen der ersetzten Variablen gegen die ersetzende Variable und einen Wert, gelesen von einer Hardware-Resource für die Kombination von Variablen, anzeigt, so dass dem Benutzer die Beziehung zwischen Variablen darlegt werden kann. Dies ermöglicht dem Benutzer, einfacher den Fehlersuchvorgang durchzuführen.
- Diese und andere Aufgaben, Vorteile und Merkmale der Erfindung werden aus der nachfolgenden Beschreibung ersichtlich werden, die in Verbindung mit den beigefügten Zeichnungen vorgenommen wird, die eine spezifische Ausführungsform der Erfindung darstellen. In den Zeichnungen:
- Fig. 1 stellt den Aufbau einer herkömmlichen Fehlersuchvorrichtung dar;
- Fig. 2A stellt ein Beispiel des gespeicherten Inhalts der Programmspeichereinheit 301 dar;
- Fig. 2B stellt ein Beispiel des gespeicherten Inhalts der Speichereinheit 302 für einen erzeugten Code dar;
- Fig. 2C stellt ein Beispiel des gespeicherten Inhalts der Fehlersuchinformations- Speichereinheit 304 dar;
- Fig. 2D stellt ein Beispiel des gespeicherten Inhalts der Optimierungsinformations- Speichereinheit 303 dar;
- Fig. 3A stellt ein Beispiel eines Eingabevorgangs für die Eingabeeinheit 401 dar;
- Fig. 3B stellt einen Inhalt der Anzeige durch die Zeilenanzeigeeinheit 405 dar;
- Fig. 3C stellt den Inhalt der Anzeige durch die Ausgabeeinheit 404 dar;
- Fig. 4 stellt den inneren Aufbau der Programmkonversionsvorrichtung und den inneren Aufbau der Fehlersuchvorrichtung, ebenso wie die Ein/Ausgabe-Zwischenbeziehungen zwischen diesen Konstruktionen und der Programmspeichereinheit 101, der Grundstruktur-Speichereinheit 102, der Speichereinheit 103 für den erzeugten Code und den Fehlersuchinformations-Speichereinheit 104 dar;
- Fig. 5A stellt ein Beispiel des gespeicherten Inhalts der Programmspeichereinheit 101 dar;
- Fig. 5B stellt ein Beispiel des gespeicherten Inhalts der Speichereinheit 103 des erzeugten Codes dar;
- Fig. 5C stellt ein Beispiel des gespeicherten Inhalts der Fehlersuchinformations- Speichereinheit 104 dar;
- Fig. 5D stellt ein Beispiel des gespeicherten Inhalts der Grundstruktur-Speichereinheit 102 dar;
- Fig. 5E stellt ein Beispiel des gespeicherten Inhalts der Grundstruktur-Speichereinheit 102 nach dem Löschen von Grundstrukturen durch die Informationslöscheinheit 108 für die bewegte Zeileninformationslöscheinheit 108 und die Informationslöscheinheit 109 der red- undanten Variablen dar;
- Fig. 6A stellt die Korrespondenz zwischen den Grundstruktur-Namen, den Ausdruckformaten und den Bedeutungsinhalten der Grundstrukturen, gespeichert durch die Grundstruktur-Speichereinheit 102, dar;
- Fig. 6B stellt die Korrespondenz zwischen den Optimierungselementen und den Grundstrukturen dar;
- Fig. 7 stellt das Hardwaremodell für die vorliegende Ausführungsform dar;
- Fig. 8A stellt ein Beispiel der Ausführungscode-Sequenz, gespeichert durch die Speichereinheit 103 für den erzeugten Code, dar;
- Fig. 8B stellt ein Beispiel der Ausführungscode-Sequenz, gespeichert durch die Fehlersuchinformations-Speichereinheit 104, dar;
- Fig. 9A stellt eine beispielhafte Anzeige auf der Anzeige 502, zusammengesetzt aus den Anzeigen durch die Ausgabeeinheit 208, die Zeilenanzeigeeinheit 209, die Zeileninformationsanzeigeeinheit 210, die Betriebs-Möglichkeit-Variable-Anzeigeeinheit 211, die Optimierungsprozessanzeigeeinheit 212 und die Variable-Automatik-Anzeigeeinheit 214, dar;
- Fig. 9B stellt eine beispielhafte Anzeige auf der Anzeige 502, zusammengesetzt aus den Anzeigen durch die Zeilenanzeigeeinheit 209, die Zeileninformationsanzeigeeinheit 210 und die Betriebs-Möglichkeit-Variable-Anzeigeeinheit 211, dar;
- Fig. 10 zeigt ein Flußdiagramm für den Verarbeitungsinhalt der Beurteilungseinheit 202 für die bewegte/gelöschte Variable;
- Fig. 11 zeigt ein Flußdiagramm für den Verarbeitungsinhalt der Unterbrechungspunkt- Einstelleinheit 203;
- Fig. 12 zeigt ein Flußdiagramm für den Verarbeitungsinhalt der Betriebs-Möglichkeit- Variable-Anzeigeeinheit 211;
- Fig. 13 zeigt ein Flußdiagramm, das den Verarbeitungsinhalt der Codeausführungseinheit 206 darstellt;
- Fig. 14A zeigt ein Flußdiagramm, das den Verarbeitungsinhalt der Steuereinheit 215 für die verknüpfte Anzeige darstellt;
- Fig. 14B zeigt auch ein Flußdiagramm, das den Verarbeitungsinhalt der Steuereinheit 215 für die verknüpfte Anzeige darstellt;
- Fig. 15A-15C stellen die Änderungen in dem Inhalt dar, angezeigt auf der Anzeige 502, entsprechend den Operationen der Steuereinheit 215 für die verknüpfte Anzeige;
- Fig. 16 zeigt ein Beispiel des gespeicherten Inhalts der Programmspeichereinheit 101 in der zweiten Ausführungsform der vorliegenden Erfindung;
- Fig. 17A stellt ein Beispiel des gespeicherten Inhalts der Programmspeichereinheit 101 in der zweiten Ausführungsform dar;
- Fig. 17B stellt ein Beispiel des gespeicherten Inhalts der Grundstruktur-Speichereinheit 102 in der zweiten Ausführungsform dar;
- Fig. 17C stellt ein Beispiel des gespeicherten Inhalts der Fehlersuchinformations- Speichereinheit 104 in der zweiten Ausführungsform dar;
- Fig. 17D stellt ein Beispiel des gespeicherten Inhalts der Speichereinheit 103 für den erzeugten Code in der zweiten Ausführungsform dar;
- Fig. 18A zeigt ein Flußdiagramm für den Verarbeitungsinhalt der Variable- Operationseinheit 207 in der zweiten Ausführungsform;
- Fig. 18B zeigt auch ein Flußdiagramm für den Verarbeitungsinhalt der Variable- Operationseinheit 207 in der zweiten Ausführungsform;
- Fig. 19A stellt ein Beispiel des gespeicherten Inhalts jedes Registers dar, wenn der Ausführungscode der Speichereinheit 103 für den erzeugten Code in der angegebenen Hardwareumgebung durch die Codeausführungseinheit 206 ausgeführt worden ist;
- Fig. 19B stellt eine beispielhafte Anzeige durch die Ausgabeeinheit 208 dar, wenn eine Verarbeitung durch die Variable-Operationseinheit 207 gemäß dem Flußdiagramm in Fig. 18 durchgeführt worden ist; und
- Fig. 19C stellt ein Beispiel des gespeicherten Inhalts jedes Registers dar, wenn der Ausführungscode der Speichereinheit 103 für den erzeugten Code in der angegebenen Hardware-Konfiguration durch die Codeausführungseinheit 206 ausgeführt worden ist.
- Das Nachfolgende ist eine Erläuterung der Ausführungsformen der vorliegenden Erfindung unter Bezugnahme auf die Fig. 4 bis 19C. Der ganze Aufbau des Programmentwicklungssystems in der ersten Ausführungsform ist in Fig. 4 dargestellt. In dieser Ausführungsform ist das Programmentwicklungssystem aus einer Programmkonversionsvorrichtung, ausgestattet mit einer Fehlersuchinformations-Erzeugungsvorrichtung, einer Fehlersuchvorrichtung, einer Programmspeichereinheit 101, einer Grundstruktur-Speichereinheit 102, einer Speichereinheit 103 für einen erzeugten Code und einer Fehlersuchinformations- Speichereinheit 104 aufgebaut. Hierbei werden die Informationen, gespeichert durch die Programmspeichereinheit 101, die Grundstruktur-Speichereinheit 102, die Speichereinheit 103 für den erzeugten Code und die Fehlersuchinformations-Speichereinheit 104 durch sowohl die Programmkonversionsvorrichtung als auch die Fehlersuchvorrichtung verwendet.
- Die Programmspeichereinheit 101 umfasst einen Speicherbereich, der in Zeileneinheiten unterteilt ist, der das Quellenprogramm, erzeugt durch einen Techniker, in einer Programmiersprache mit hohem Niveau speichert.
- Fig. 5A stellt ein Beispiel eines Quellenprogramms, geschrieben in einer "C" Sprache, das durch die Programmspeichereinheit 101 gespeichert ist, dar. Dieses beispielhafte Programm ist aus einer Mehrzahl von Quellencode-Angaben aufgebaut, die mit "Zeile 1", "Zeile 2", "Zeile 3", ... nummeriert worden sind. Jede Zeile speichert eine Angabe in dem Quellencode, die unter Verwendung von Semikolons ";" abgegrenzt worden ist. Von diesen Angaben besitzen Angaben (bezeichnet als Substitutions-Angaben), die ein Gleichheitszeichen "=" umfassen, einen Variable-Namen an der linken Kante des Gleichheitszeichens, um zu zeigen, dass der Wert rechts von dem Gleichheitszeichen zu dieser Variablen substituiert ist.
- In dem vorliegenden Beispiel sind drei Arten von Substitutions-Angaben vorhanden. Die erste Art besitzt eine Variable auf deren rechten Seite, um zu der linksseitigen Variablen substituiert zu werden. Die zweite Art besitzt eine Konstante auf deren rechten Seite, um zu der linksseitigen Variablen substituiert zu werden. Die dritte Art besitzt eine Operation, aufgebaut aus Operanden, und Operatoren auf deren rechten Seite, deren Ergebnis zu der linksseitigen Variablen substituiert werden soll.
- Das Nachfolgende ist eine Erläuterung der Bedeutung der Angaben in dem Programm, dargestellt in Fig. 5A, das durch die Programmspeichereinheit 101 gespeichert ist. Die Quellencode-Angabe "void test (void)" in Zeile 1 zeigt den Beginn der Funktion "test" an. In dieser Angabe zeigt der Ausdruck "void", dass dort keine Rückführung des Arguments in der Funktion "test" vorhanden ist.
- Zeile 2 zeigt eine deklarative Angabe, die deklariert, dass die temporären Variablen "a, b, x, z", die ausschließlich durch die Funktion "test" verwendet sind, ganze Zahlen "int" sind. Zeile 3 ist eine Substitutions-Angabe, die die Substitution des Werts 100 in die Variable b darstellt.
- Zeile 4 ist eine Funktions-Aufruf-Angabe zum Aufrufen der Funktion "init".
- Zeile 5 zeigt an, dass, während sich die Bedingung "***" in "while (***)" in dem logischen Zustand "1" befindet, der Bereich, umschlossen durch die geschwungenen Klammern "{" and "}", das bedeutet die Zeilen 5 bis 12, wiederholt wird. Da der Zustand, spezifiziert in Zeile 5, "1" ist, wird der Bereich zwischen den geschwungenen Klammern "{" and "}" wiederholt ad infitum sein.
- Zeile 6 ist eine Angabe, die einen Aufruf der Funktion "getData1" und eine Substitution des Rückführungswerts dieser Funktion in die Variable x darstellt.
- Zeile 7 stellt eine Substitution des Ergebnisses des Operationsausdrucks "12*b" in die Variable a dar.
- Zeile 8 stellt einen Aufruf einer Funktion g1 mit der Variablen a als ein Argument dar.
- Zeile 9 stellt die Substitution des Werts der Variablen x in die Variable z dar.
- Zeile 10 stellt einen Aufruf einer Funktion g2 mit der Variablen z als ein Argument dar.
- Zeile 11 stellt einen Aufruf einer Funktion g3 mit der Variablen x als ein Argument dar.
- Zeile 12 stellt das Ende des wiederholten Bereichs, definiert in Zeile 5, dar.
- Zeile 13 drückt das Ende der Funktion "test" aus. ·
- Die Grundstruktur-Speichereinheit 102 besitzt einen Speicherbereich, der in Zeilen in derselben Art und Weise wie die Programmspeichereinheit 101 unterteilt ist. Der Unterschied zu der Programmspeichereinheit 101 ist derjenige, dass, während die Programmspeichereinheit 101 das Quellenprogramm speichert, das zuvor durch den Programmierer erzeugt ist, keine solchen Informationen in die Grundstruktur-Speichereinheit 102 in deren Anfangszustand geschrieben werden. Die Grundstruktur-Speichereinheit 102 wird allerdings dazu verwendet, Informationen, bezeichnet als Grundstrukturen, zu speichern, die durch die Grundstruktur-Erzeugungseinheit 107 erzeugt sind. Grundstrukturen werden später in diesem Text beschrieben.
- Die Speichereinheit 103 für den erzeugten Code ist ähnlich unterteilt in eine Mehrzahl von kleinen Bereichen, wobei jeder dieser kleinen Bereiche einen Speicherbereich besitzt, der einer Adresse zugeordnet ist. Diese Speicherbereiche werden dazu verwendet, einen Ausführungscode zu speichern, wenn ein Ausführungscode durch die Codeerzeugungseinheit 110 erzeugt worden ist. Ein Ausführungsode wird auch später in diesem Text beschrieben.
- Die Fehlersuchinformations-Speichereinheit 104 ist aus einer Zeilenadressenspeichereinheit 1401 und einer Funktionsinformations-Speichereinheit 1402 aufgebaut. Die Zeilenadressenspeichereinheit 1401 umfasst einen Speicherbereich, der in Korrespondenztabellen unterteilt ist. Diese Korrespondenztabellen besitzen eine Adressenspalte und eine Zeilenspalte, die jeweils dazu verwendet werden, die Adressen, gegeben für kleine Bereiche in dem Speicherbereich der Speichereinheit 103 für den erzeugten Code und von Zeilenzahlen, zugeordnet zu jeder Zeile in der Programmspeichereinheit 101, aufzuzeichnen.
- Die Funktionsinformations-Speichereinheit 1042 speichert die Namen der Funktionen, geliefert durch das Quellenprogramm, gespeichert in der Programmspeichereinheit 101, deren Argumente und Rückführungswerte, und die Namen und Formate der Argumente und der Rückführungswerte der Funktionen. In Bereitschaft für dann, wenn Funktionen in einen Ausführungscode konvertiert werden, wird die Startadresse jeder Funktion auch aufgezeichnet. Auch kann, in Bereitschaft für dann, wenn Variable in Stapelspeicheradressen gespeichert sind, ein Offset-Wert für den Stapelspeicher aufgezeichnet werden.
- Das Nachfolgende ist eine Erläuterung des Aufbaus der Programmkonversionsvorrichtung, dargestellt in Fig. 4. Diese Programmkonversionsvorrichtung ist aus einer Konversionseinheit 105 für einen internen Ausdruck, einer Optimierungseinheit 106, einer Grundstruktur-Erzeugungseinheit 107, einer Informationslöscheinheit 108 für eine bewegte Zeile, einer Informationslöscheinheit 109 für eine redundante Variable, einer Codeerzeugungseinheit 110 und einer Zeilenadresseninformationserzeugungseinheit 111 aufgebaut. Von diesen setzen die Grundstruktur-Erzeugungseinheit 107 und die Zeilenadresseninformationserzeugungseinheit 111 die Fehlersuchinformations-Erzeugungsvorrichtung zusammen. Die Konversionseinheit 105 für den internen Ausdruck empfängt das Programm von der Programmspeichereinheit 101 und wandelt Zeichenfolgen in interne Ausdrücke um. Hierbei ist es für die internen Ausdrücke normal, dass sie unter Verwendung einer Syntaxanalyse ausgedrückt werden, obwohl in der vorliegenden Ausführungsform ein Verfahren, das die Korrekturen ausdrückt, vorgenommen durch das Programm, zum einfacheren Verständnis verwendet wird.
- Die Optimierungseinheit 106 schreibt das Programm, umgewandelt in interne Ausdrücke durch die Konversionseinheit 105 für die internen Ausdrücke, um. Um dies so vorzunehmen, ist die Optimierungseinheit 106 aus einer üblichen Unterausdruck- Optimierungseinheit 1061, einer Optimierungseinheit 1062 für eine Konstante- Propagation, eine Kopie-Propagations-Optimierungseinheit 1063, eine Optimierungseinheit 1064 für eine Schleifen-Invariant-Angabe, eine Optimierungseinheit 1065 für einen redundanten Code und eine Registerzuordnungseinheit 1066 aufgebaut.
- Die Optimierungseinheit 1061 für den gemeinsamen Unterausdruck analysiert, ob die gemeinsamen Operationsunterausdrücke an der rechten Kante einer Mehrzahl von Substitutions-Angaben verwendet werden. Diese Art einer Analyse wird durchgeführt, da Berechnungsinstruktionen, die eine Steuerung einer arithmetischen, logischen Einheit (arithmetic logic unit - ALU) umfassen, vorgesehen in der zentralen Verarbeitungseinheit (CPU), von Operationsausdrücken, wie beispielsweise Additionen, Subtraktionen, Multiplikationen und Divisionen, erzeugt werden. Diese Berechnungsinstruktionen rufen eine Belastung für die ALU hervor, die viel höher als andere Instruktionen ist, so dass dann, wenn derselbe Operationsausdruck in einer Mehrzahl von Substitution-Angaben vorhanden ist, die Belastung an der CPU im Verhältnis zu dieser Zahl von Substitutions-Angaben erhöht werden wird: Um dieses Phänomen zu vermeiden, analysiert die Optimierungseinheit 1061 für den gemeinsamen Unterausdruck, ob ein gemeinsamer Operationsausdruck an der rechten Kante eine Mehrzahl von Substitutions-Angaben verwendet wird.
- Das Nachfolgende ist eine Erläuterung, die sich auf ein Beispiel-Programm bezieht, das vier Substitutions-Angaben, "y=fnc(x*300)", "z=(x*300)+5", "a=b+13*(x*300)" und "a=540/(x*300)" umfasst, die alle den Operationsausdruck "x*300" umfassen. Wenn diese durch die Optimierungseinheit 1061 für den gemeinsamen Unterausdruck analysiert werden, wird der Operationsausdruck "x*300" an dessen rechten Kanten durch die Variable "t1" ersetzt. Indem dies so vorgenommen wird, werden diese vier Substitutions-Angaben "y=fnc(t1)", "z=t1+5", "a=b+13/t1" und "a=540/t1". Nach Abschluß dieser Substitution ordnet die Optimierungseinheit 1061 für den gemeinsamen Unterausdruck diese Variable "t1" auf der linken Kante einer Substitutions-Angabe an und setzt den ersetzten Ausdruck "x*300" an die rechte Kante, um die Substitutions-Angabe "t1=x*300" zu erzeugen, die sie dann in das Programm einsetzt. Als Folge dieser Optimierung werden die Operationsausdrücke in den vier originalen Substitutions-Angaben gelöscht, mit einer Variablen, die an deren Stelle erzeugt wird, so dass der Effekt auch das Programm als ein Gesamtes dieser Operationsausdrücke auf ein Viertel der originalen Belastung reduziert werden kann. Als nächstes wird, je mehr solcher gemeinsamer Unterausdrücke in Substitutions-Angaben eingeschlossen werden, desto größer der Effekt der Optimierung durch die Optimierungseinheit 1061 für den gemeinsamen Unterausdruck.
- Die Konstante-Propagations-Optimierungseinheit 1062 analysiert, ob dort eine Substitutions-Angabe vorhanden ist, die eine Konstante in eine Variable substituiert, und ob diese Variable (das bedeutet die Variable ist an der rechten Kante einer Substitutions-Angabe vorhanden) in irgendeiner der Substitutions-Angaben, die dieser Substitutions-Angabe folgen, verwendet wird. Diese Analyse wird durchgeführt, um die größtmögliche Reduktion in der Anzahl von Substitutions-Angaben vorzunehmen, die Konstanten in Variable substituieren. Hierbei muß, falls dort eine Substitutions-Instruktion vorhanden ist, die eine Konstante in eine Variable substituiert, allerdings dort keine andere Substitutions-Angabe vorhanden ist, diese Variable verwendet, eine solche Substitutions-Instruktion redundant sein und kann so unmittelbar ohne Beeinflussung des Programms auf irgendeine Art und Weise gelöscht werden. Falls die Variable in einer folgenden Substitutions-Angabe verwendet wird, analysiert die Konstanten-Propagations-Optimierungseinheit 1062, ob die Substitions-Angaben mit dieser Variablen an der rechten Kante durch eine Konstante ersetzt werden können. In Fig. 5A kann die Variable b in der Quellencode-Angabe "a=12*b" an Zeile 7 dahingehend angesehen werden, dass sie zu der Konstanten "100" durch die Substitutions-Angabe an Zeile 3 gesetzt werden soll. Um diese Substitution der Konstanten 100 in die Variable b an Zeile 3 zu löschen, ersetzt die Konstante-Propagations- Optimierungseinheit 1062 die Variable b in Zeile 7 gegen die Konstante 100, so dass die Quellencode-Angabe "a=12*b" zu "a=12*100" wird.
- Die Kopie-Propagations-Optimierungseinheit 1063 führt eine Analyse darüber durch, ob dort irgendwelche Übertragungsangaben vorhanden sind, wie beispielsweise "a=b" oder "y=x", die einfach den Wert einer Variablen in eine andere überführen, und ob die Variablen, eingestellt durch solche Übertragungsangaben, in anderen Übertragungsangaben verwendet werden, die später im Programm erscheinen. Diese Analyse wird durchgeführt, um die größtmögliche Reduktion in Übertragungsangaben vorzunehmen, die Werte zwischen Variablen übertragen. Dies bedeutet, dass dann, wenn eine Variable-zu-Variable- Übertragungs-Angabe in dem Programm vorhanden ist, allerdings die Übertragungsbestimmungsvariable nicht durch irgendeine andere Angabe verwendet wird, die Übertragungsangabe redundant sein muß und so unmittelbar ohne Beeinflussung des Programms auf irgendeine Art und Weise gelöscht werden kann. Wenn die Übertragungsbestimmungsvariable in der Substitutions-Angabe später in dem Programm verwendet wird, analysiert die Kopie-Propagations-Optimierungseinheit 1063, ob eine Substitutions- Angabe, die diese Variable auf der rechten Seite besitzt, durch die Übertragungsquellenvariable ersetzt werden kann. Dies bedeutet, dass die Kopie-Propagations- Optimierungseinheit 1063 positive Versuche bei einer Substitution vornimmt, so dass die Variable-zu-Variable-Übertragungsinstruktionen gegen eine Variable ersetzt weiden können. Falls ein Ersetzen möglich ist, wird die Variable auf der rechten Seite der Substitutions-Angabe gegen eine andere Variable ersetzt.
- Ein Beispiel des Vorstehenden wird unter Bezugnahme auf Zeile 9 in Fig. 5A erläutert werden, wobei der Wert der Variablen x zu der Variablen z überführt wird. Um Übertragungen zu löschen, die für das Programm bedeutungslos sind, sucht die Kopie- Propagations-Optimierungseinheit 1063 nach Verwendungen der Variablen z und findet die Substitutions-Angabe in Zeile 9. Um diese Substitutions-Angabe zu löschen, ersetzt die Kopie-Propagations-Optimierungseinheit 1063 die Variable z in dem Ausdruck "g2(z)" an Zeile 10 gegen die Variable x. Als Folge dieses Ersetzens wird Zeile 10 des Programms "g2(x)".
- Die Schleifen-Invariant-Angabe-Optimierungseinheit 1064 analysiert, ob dort irgendwelche Angaben in Schleifen vorhanden sind, für die eine Bewegung zu außerhalb der Schleife nicht das Ausführungsergebnis beeinflußt. In einem normalen Programm können Instruktionen, die in Schleifen umfasst sind, mehrere hundert oder tausend Male ausgeführt werden, so dass diese Verarbeitungszeit aufgrund von redundanten Instruktionen innerhalb von Schleifen hundert oder tausend Mal derjenigen derselben Instruktionen außerhalb von Schleifen ist. Beispiele solcher Instruktionen sind redundante Instruktionen, die nicht den Wert einer Übertragungs-Bestimmungs-Variablen in irgendeiner der hundert, oder dergleichen, Iterationen beeinflußt. Beim Erfassen solcher Instruktionen bewegt die Optimierungseinheit 1064 für schleifen-invariante Angaben sie außerhalb der Schleifen. Für das Beispiel-Programm, dargestellt in Fig. 5A, ist die Angabe "a=12*b" an Zeile 7 ein Beispiel einer solchen Instruktion, die, dargestellt durch Zeile 4 in Fig. 5B, außerhalb des Schleifen- Prozesses bewegt werden kann, der durch die Angabe "while" an Zeile 7 angegeben ist.
- Dies kommt daher, dass keine Änderung in den Werten von Variablen a und b während der Iterationen der Schleife, beginnend von der Angabe "while", erfaßt werden. Die Optimierungseinheit 1065 für einen redundanten Code löscht Angaben, die als redundant durch die Unterausdruck-Optimierungseinheit 1061, die Konstanten-Propagations- Optimierungseinheit 1062 und die Kopie-Propagations-Optimierungseinheit 1063 behandelt worden sind. Das Nachfolgende ist eine Erläuterung des Falls des Beispiel- Programms, dargestellt in Fig. 5A. Wie vorstehend beschrieben ist, wird die Variable b auf Zeile 7 (Line 7) durch die Konstante 100 durch die Konstanten-Propagations- Optimierungseinheit 1062 ersetzt, und die Variable z auf Zeile 10 wird durch die Variable x durch die Kopie-Propagations-Optimierungseinheit 1063 ersetzt. Als Folge eines solchen Ersetzens werden die Substitutions-Angaben auf Zeile 3 und Zeile 9 als redundant beurteilt und werden durch die Redundant-Code-Optimierungseinheit 1065 gelöscht. Hierbei löscht die Redundant-Code-Optimierungseinheit 1065 auch Übertragungsangaben, die einen Wert zu einer Variablen substituieren, die darauffolgend nicht durch die anderen Angaben in dem Programm verwendet werden.
- Die Registerzuordnungseinheit 1066 ordnet die Hardware-Resourcen, wie beispielsweise Register und Speicheradressen, der Zielmaschine zu den Variablen in dem Programm zu. Beim Durchführen einer solchen Zuordnung untersucht die Registerzuordnungseinheit 1066, ob sich die Lebensbereiche der Variablen in den Programmen überlappen, und ordnet Variablen den sich überlappenden Lebensbereichen zu unterschiedlichen Registern zu. Die Registerzuordnungseinheit untersucht auch das Schleifen-Verschachtelungs- Tiefenniveau jeder Variablen und/oder die Häufigkeit einer Verwendung jeder Variablen, bevor eine Priorität jeder Variablen basierend auf deren Untersuchungsergebnissen zugeordnet wird. Es kann dann fortgeschritten werden, um Register den Variablen in der Reihenfolge der zugeordneten Prioritäten zuzuordnen. Hierbei werden Variablen, die nicht Registern zugeordnet sind, Adressen in dem Stapelspeicherspeicher zugeordnet. Für das beispielhafte Programm der Fig. 5A werden die Variablen b und z nicht verwendet, und sind so nicht einer Resource zugeordnet. Andererseits wird das Register D2 der Variablen a zugeordnet und das Register D3 wird der Variablen x zugeordnet. Der sich ergebende, optimierte Code ist in Fig. 5C dargestellt.
- Die Grundstruktur-Erzeugungseinheit 107 ist ein Standardaufbauelement in jeder Fehlersuchinformations-Erzeugungsvorrichtung und überwacht die Erzeugung von Fehlersuchinformationen durch die Optimierung der Optimierungseinheit 106, zu derselben Zeit, zu der Grundstrukturen erzeugt werden, wenn dies geeignet ist, und zeichnet sie in der Grundstruktur-Speichereinheit 102 auf. Hierbei sind "Grundstrukturen" eine Art von Fehlersuchinformationen, die die Details der Änderungen in den Quellencode-Angaben aufgrund der Optimierungsprozesse der Optimierungseinheit 106 darstellen.
- Die Optimierung der Optimierungseinheit 106 ist aus dem Ersetzen von Unterausdrücken gegen Variable durch die Optimierungseinheit 1061 für übliche Unterausdrücke, die Ersetzung von Variablen gegen Inhalte durch die Konstante-Propagations-Optimierungseinheit 1062, die Ersetzung von Variablen gegen andere Variable durch die Kopie-Propagations- Optimierungseinheit 1063, die Bewegung von Angaben für innenseitige Schleifen zu der Außenseite durch die Schleifen-Invariant-Angabe-Optimierungseinheit 1064, die Löschung von redundanten Angaben durch die Optimierungseinheit 1065 für einen redundanten Code und die Zuordnung von Registern und Adressen in dem Stapelspeicherspeicher durch die Registerzuordnungseinheit 1066 gegen Grundstrukturen, die durch die Grund struktur-Erzeugungseinheit 107 an allen diesen Optimierungsstufen erzeugt sind, aufgebaut.
- Das Nachfolgende ist eine Erläuterung der unterschiedlichen Arten einer Grundstruktur und deren unterschiedlichen Formen eines Ausdrucks, und zwar unter Bezugnahme auf Fig. 6A. Diese Figur stellt das Ausdrucksformat der unterschiedlichen Arten von Grundstrukturen und deren jeweilige Bedeutungen in der Form einer Korrespondenztabelle dar. In der Korrespondenztabelle sind Grundstrukturen grob in "Grundstrukturen für Variable", "Grundstrukturen für Unterausdrücke" und "Grundstrukturen für Zeilen" klassifiziert. Von diesen sind Grundstrukturen für Variablen aus "gelöschten Variablen", "bewegten Variablen", "ersetzten Variablen" und "Resourcen für Variablen" aufgebaut, während Grundstrukturen für Zeilen eines Resourcen-Codes aus "gelöschten Zeilen" und "bewegten Zeilen" aufgebaut sind.
- Der Eintritt "delete x1" ("lösche x1") in der Ausdruck-Format-Spalte ist ein Beispiel einer Grundstruktur einer "deleted variable" ("gelöschten Variablen"), wobei deren Bedeutung in der Bedeutungsspalte rechts angegeben wird. Dies zeigt, dass der Ausdruck "delete x1" ("lösche x1") die Löschung der Variablen x1 angibt. Es ist anzumerken, dass diese Variable nicht auf das Beispiel-Programm der Fig. 5A bezogen ist.
- Der Eintritt "move x2 to: line 1)" ("bewege x2 zu: Zeile 1 ") in der Ausdruck-Format-Spalte ist ein Beispiel einer Grundstruktur einer "moved variable" ("bewegten Variablen"), wobei diese Bedeutung in der Bedeutungsspalte rechts angegeben ist. Dies zeigt, dass der Ausdruck "move x2 to: line 1" ("bewege x2 zu: Zeile 1 ") die Bewegung einer Variablen x2 zu Zeile 1 angibt. Es ist wiederum anzumerken, dass diese Variable nicht auf das Beispiel- Programm von Fig. 5A bezogen ist.
- Die Ausdrücke "replace x3→y1" ("ersetze x3→y1"), "replace x4→5" ("ersetze x4→5") in der Ausdruck-Format-Spalte sind Beispiele von Grundstrukturen für "replaced variable" ("eine ersetzte Variable"), wobei deren jeweiligen Bedeutungen in der Bedeutungsspalte rechts angegeben sind. Dies zeigt, dass der Ausdruck "replace x3→y1" ("ersetze x3→yl") die Ersetzung der Variablen x3 gegen die Variable y1 bezeichnet, und der Ausdruck "replace x4→5" ("ersetze x4→5") das Ersetzen der Variablen x4 gegen die Konstante 5 angibt. Es ist wiederum anzumerken, dass diese Variablen nicht auf das Beispiel-Programm der Fig. 5A in Bezug gesetzt sind.
- Die Beziehung zwischen den verschiedenen Optimierungsprozessen und den erzeugten Grundstrukturen ist in Fig. 6B dargestellt. Hierbei zeigt Fig. 6B, welche der unterschiedlichen Arten von Grundstrukturen, dargestellt in Fig. 6A, erzeugt werden, wenn jeder der Optimierungsprozesse durchgeführt wird. In dieser Tabelle ist das Wort "generation" ("Erzeugung") in der Spalte " subexpression replaced" ("Unterausdruck ersetzt") und die Spalte "generated statement" ("erzeugte Angabe") für die Reihe "common subexpression optimization" ("Optimierung des üblichen Unterausdrucks") angegeben, was zeigt, dass diese Arten von Grundstrukturen durch die Grundstruktur-Erzeugungseinheit 107 erzeugt werden, wenn eine Optimierung durch die Spalten-Unterausdruck-Optimierungseinheit 1061 durchgeführt wird. Hierbei werden, wenn die Unterausdrücke, verwendet in einer Mehrzahl von Quellencode-Angaben, gegen eine Variable durch die Optimierungseinheit 1061 für den gemeinsamen Unterausdruck ersetzt werden, Grundstrukturen "subexpression replaced" ("Unterausdruck ersetzt") erzeugt werden. Auch erzeugt, wenn die Optimierungseinheit 1061 für einen gemeinsamen Unterausdruck eine Quellencode-Angabe durch Ersetzen des in Rede stehenden Unterausdrucks auf der rechten Seite und die Variable, verwendet bei der Ersetzung auf der linken Seite, erzeugt, die Grundstruktur- Erzeugungseinheit 107 eine Grundstruktur "generated statement" ("erzeugte Angabe") erzeugt.
- In der Tabelle in Fig. 6B ist das Wort "generation" ("Erzeugung") in der Spalte "replaced variable" ("ersetzte Variable") und der Spalte "deleted line" ("gelöschte Zeile") für die Reihe "Konstante-Propagations-Optimierung" angegeben, was zeigt, dass diese Arten von Grundstrukturen durch die Grundstruktur-Erzeugungseinheit 107 erzeugt werden, wenn eine Optimierung durch die Konstanten-Propagations-Optimierungseinheit 1062 durchgeführt wird. Dies bedeutet, dass dann, wenn die Optimierungseinheit 106 aktiviert ist, die Grundstruktur-Erzeugungseinheit 107 fortfährt, die Operationen der Optimierungseinheit 106 zu beobachten, so dass dann, wenn eine Mehrzahl von Variablen in Quellencode- Angaben gegen Konstante durch die Konstante-Propagations-Optimierungseinheit 1062 ersetzt werden, eine Grundstruktur " replaced variable" ("ersetzte Variable") erzeugt wird. Nachdem die Verarbeitung der Konstanten-Propagations-Optimierungseinheit 1062 abgeschlossen worden ist, werden die redundanten Quellencode-Angaben gelöscht und eine Grundstruktur "deleted line" ("gelöschte Zeile") wird durch die Grundstruktur- Erzeugungseinheit 107 erzeugt.
- In der Tabelle in Fig. 6B istdas Wort "generation" ("Erzeugung") in der Spalte "replaced variable" ("ersetzte Variable") und der Spalte "deleted line" ("gelöschte Zeile") für die Reihe "copy propation optimization" ("Kopie-Propagations-Optimierung") angegeben, was zeigt, dass diese Arten von Grundstrukturen durch die Grundstruktur-Erzeugungseinheit 107 erzeugt werden, wenn eine Optimierung durch die Kopie-Propagations- Optimierungseinheit 1063 durchgeführt wird. Dies bedeutet, dass dann, wenn die Optimierungseinheit 106 aktiviert wird, die Grundstruktur-Erzeugungseinheit 107 fortfährt, die Operationen der Optimierungseinheit 106 zu beobachten, so dass dann, wenn eine Mehrzahl von Variablen in den Quellencode-Angaben durch eine andere Variable durch die Konstanten-Propagations-Optimierungseinheit 1063 ersetzt werden, eine Grundstruktur "replaced variable" "ersetzte Variable" erzeugt wird. Nachdem die Verarbeitung der Kopie- Propagations-Optimierungseinheit 1063 vervollständigt worden ist, werden die redundanten Quellencode-Angaben gelöscht und eine Grundstruktur "deleted line" ("gelöschte Zeile") wird durch die Grundstruktur-Erzeugungseinheit 107 erzeugt.
- Hierbei erzeugt, wenn die Optimierungseinheit 1065 für den redundanten Code Übertragungsangaben löscht, die einen Wert in eine Variable substituieren, der darauffolgend nicht durch die anderen Angaben in dem Programm verwendet wird, die Grundstruktur- Erzeugungseinheit 107 wiederum eine Grundstruktur "deleted variable" ("gelöschte Variable") und eine Grundstruktur "deleted line" ("gelöschte Zeile").
- Das Nachfolgende ist eine Erläuterung der Betriebsweise der Grundstruktur- Erzeugungseinheit 107, die sich auf das Beispiel-Programm, dargestellt in Fig. 5A, beziehen wird. Zur selben Zeit, wie die Optimierungseinheit 1062 für die Konstante-Propagation die Variable b in Zeile 7 des Programms in Fig. 5A gegen die Konstante 100 ersetzt, gibt die Grundstruktur-Erzeugungseinheit 107 die Grundstruktur "replace b→100" ("ersetze b→100") aus.
- Zur derselben Zeit, wie die Variable z in Zeile 10 gegen die Variable x durch die Kopie- Propagations-Optimierungseinheit 1063 ersetzt wird, gibt die Grundstruktur- Erzeugungseinheit 107 die Grundstruktur "delete z→x" ("ersetze z→x") aus. Nach dem Ersetzen durch die Optimierungseinheit 1062 für die Konstanten-Propagation und die Kopie-Propagations-Optimierungseinheit 1063 wird Zeile 7 durch die Schleifen-Invariant- Angabe-Optimierungseinheit 1064 bewegt, so dass die Grundstruktur-Erzeugungseinheit 107 die Grundstruktur "move line to: line 4" ("bewege Zeile zu: Zeile 4") ausgibt, um die Bewegung dieser Zeile eines Quellencodes darzustellen. Wenn die Zeilen 3 und 9 gelöscht sind, werden die Grundstrukturen "line deletation" ("Zeilenlöschung") durch die Grundstruktur-Erzeugungseinheit 107 ausgegeben.
- Wenn die Registerzuordnungseinheit 1066 das Register D2 einer Variablen a in Zeile 4, wobei die Einstellung und Referenz dieser Variablen möglich in Zeilen 5, 6, 8, 10 und 11 ist, zuordnet, gibt die Grundstruktur-Erzeugungseinheit 107 eine Grundstruktur "Resource a:D2" aus, die die Zuordnungs-Beziehung einer Variablen und eine Resource für jede der Zeilen 5, 6, 8, 10 und 11 darstellt. Wenn die Registerzuordnungseinheit 1066 das Register D3 der Variablen x zuordnet, da die Variable x zu jeder der Zeilen 6, 8 und 11 eingestellt oder dazu in Bezug gesetzt werden kann, gibt die Grundstruktur-Erzeugungseinheit 107 eine Grundstruktur "Resource x:D3" aus, die die Zuordnungs-Beziehung der Variablen und der Resource für jede der Zeilen 8, 10 und 11 darstellt. Als Folge wird der gespeicherte Inhalt der Grundstruktur-Speichereinheit 102 so, wie dies in Fig. 5D dargestellt ist. Hierbei ist die Einheit des Programms, für die jede Grundstruktur erzeugt ist, eine Zeile eines Quellencodes. Indem dies so vorgenommen wird, wird eine Grundstruktur erzeugt, um die Zuordnungs-Beziehung zwischen einer Variablen und einer Resource auszudrücken. Es sollte hier angemerkt werden, dass Grundstrukturen für eine Einheit erzeugt werden können, die kleiner als eine Zeile eines Quellencodes ist, das allerdings die Programmkonversionsvorrichtung der vorliegenden Erfindung eine Ein-Zeilen-Einheit verwendet, da sie so zugeordnet ist, um den Benutzer mit einer Entwicklungsumgebung zur Verwendung einer Programmiersprache mit hohem Niveau auszustatten. Als Folge verwendet die Fehlersuchvorrichtung, die später beschrieben ist, auch Zeileneinheiten, wenn eine Operation gehalten wird, was die Kompatibilität zwischen der Programmkonversionsvorrichtung und der Fehlersuchvorrichtung verbessert. (Es ist hier anzumerken, dass sich die Transformationsinformationen in den Ansprüchen auf eine Kombination einer der Grundstrukturen, beschrieben vorstehend, und einer Zeilenzahl beziehen).
- Die Informationslöscheinheit 108 für die bewegte Zeile löscht Grundstrukturen, die in den Substitutions-Angaben umfasst sind, die bewegt worden sind, von allen Grundstrukturen, die in der Grundstruktur-Speichereinheit 102 durch die Grundstruktur-Erzeugungseinheit 107 geschrieben sind. Durch Löschen solcher Grundstrukturen, die in den bewegten Zeilen umfasst waren, auf diese Art und Weise, reduziert die Informationslöscheinheit 108 für die bewegte Zeile die Menge an Informationen, gespeichert durch die Grundstruktur- Speichereinheit 102. Als ein Beispiel, für das beispielhafte Programm der Fig. 5A, ist die Substitutions-Angabe "a=12*b" bereits so geschrieben worden, dass sie von Zeile 6 zu einer Position nach Zeile 4 bewegt ist. Wie in Fig. 5D dargestellt ist, werden "substitution b→100" und "line movement to: line 4" ("Zeilenbewegung zu: Zeile 4") in der Spalte aufgezeichnet, die der Zeile 7 entspricht, und zwar in der Speichereinheit 103 für den erzeugten Code, entsprechend zu dieser Substitutions-Angabe "a=12*b". In der Spalte entsprechend dieser Zeile 7 in der Speichereinheit 103 für den erzeugten Code, dargestellt in Fig. 5D, drückt die Grundstruktur "line moveent to: line 4" ("Zeilenbewegung zu: Zeile 4") eine Bewegung der Zeile aus, während die andere Grundstruktur "substitution b→100") "Substitution b→100") eine Ersetzung ausdrückt. Durch Löschung dieser Grundstrukturen ist die Informationslöscheinheit 108 für die bewegte Zeile in der Lage, die gesamte Menge an Grundstruktur-Informationen zu reduzieren.
- Die invariante, variable Informationslöscheinheit 109 löscht die Grundstrukturen, die Zuordnungs-Beziehungen zwischen redundanten Variablen und Resourcen ausdrücken, von den Grundstrukturen, die nach dem Löschen durch die Informationslöscheinheit 108 für die bewegte Zeile verbleiben. Der Ausdruck "invariante Variable" bezieht sich hier auf eine Variable, die weder in der Programmzeile vorhanden ist, noch in einer Grundstruktur umfasst ist, die eine Ersetzung oder Bewegung ausdrückt.
- Für das Beispiel-Programm in Fig. 5A ist eine Variable a eine solche invariante Variable, da sie nicht an irgendeiner der Zeilen in dem Programm vorhanden ist. Die Grundstruktur "Resource a:D2" wird für jede der Zeilen 5, 6, 10 und 11 ausgegeben, was die Resource- Zuordnung für die Variable a darstellt, allerdings sind diese nur Grundstrukturen, die eine Resource für eine invariante Variable ausdrücken, so dass diese Grundstrukturen "Resource a:D2" für jede der Zeilen 5, 6, 10 und 11 gelöscht werden. Allerdings wird, da die Variable a in der Quellencode-Angabe an Zeile 8 vorhanden ist, die Grundstruktur "Resource a:D2" nicht gelöscht.
- Die Variable x an der Zeile 10 ist ein weiteres Beispiel einer Variablen, die nicht in dem Programm verwendet ist, und eine Grundstruktur "Resource x:D3" wird für die Zuordnungs-Beziehung einer Resource mit dieser Variablen ausgegeben, allerdings wird, in diesem Fall, die Grundstruktur nicht gelöscht. Dies kommt daher, dass die Variable x auch in der ausgegebenen Grundstruktur " replace z→x" ("ersetze z→x") vorhanden ist, die eine Ersetzung ausdrückt. Als Folge wird die Grundstruktur; ,Resource x:D3" für Zeile 11, die die Zuordnungs-Beziehung einer Resource und einer Variablen ausdrückt, nicht gelöscht. Wenn eine Grundstruktur einer "deleted line" ("gelöschten Zeile")durch die Grundstruktur- Erzeugungseinheit 107 erzeugt ist, erfaßt die Informationslöscheinheit 109 für die invariante Variable die Ersetzungs-Grundstrukturen und die Resourcen-Zuordnungs- Grundstrukturen, die eine selbe Zeilenzahl wie eine Quellencode-Angabe, umfasst in einer Grundstruktur einer "deleted line" ("gelöschten Zeile"), haben, vor einem Löschen der gelöschten Grundstrukturen.
- Wenn Grundstrukturen durch die Informationslöscheinheit 108 für eine bewegte Zeile gelöscht sind, wird der gespeicherte Inhalt der Grundstruktur-Speichereinheit 102 von dem Inhalt, dargestellt in Fig. 5D, zu demjenigen, dargestellt in Fig. 5E, transformiert.
- Die Codeerzeugungseinheit 110 wandelt das Programm, umgeschrieben durch die Optimierungseinheit 106, in einen Ausführungscode und speichert das Ergebnis in der Speichereinheit 103 für den erzeugten Code. Hierbei bezieht sich "execution code" ("Ausführungscode") auf einen Code, der durch die Hardware der Target-Maschine decodiert und ausgeführt werden kann: Speziell ist hier die Skalierung der Target-Maschine anzuführen, mit der Programmkonvertiervorrichtung der vorliegenden Ausführungsform, die eine Ausführung für ein System erzeugt, das das Hardwaremodul, dargestellt in Fig. 7, besitzt. Hierbei ist die zentrale Verarbeitungseinheit (CPU), dargestellt in Fig. 7, grundsätzlich mit den Datenregistern D0, D1, D2 und D3, den Adressenregistern A0, A1, A2 und A3 und einer arithmetischen, logischen Einheit (ALU) ausgestattet. Die CPU ist zusätzlich mit einem Programmzähler PC versehen, der zeigt, welche Adresse momentan ausgeführt wird, und mit einem Stapelspeicher-Hinweiszeiger SP, der eine Startadresse in einem momentanen Stapelspeicher anzeigt. Hierbei sind der Ausführungscode und der Stapelspeicher in einem Speicher angeordnet.
- Fig. 8A stellt den Code dar, der durch die Konvertiereinrichtung für das momentane Programm für das Hardwaremodul, dargestellt in Fig. 7, erzeugt ist. In dem erzeugten Code der Fig. 8A werden Register als Speicheradressen von Argumenten und Rückführungswerten verwendet, wenn eine Funktion aufgerufen ist, mit Registern, die durch die Funktion verwendet werden, die an dem Start der Funktion eingespart und an deren Ende wieder hergestellt bzw. gespeichert wird. ·
- Das Nachfolgende ist eine Erläuterung der Bedeutung des Ausführungscodes an jeder Adresse in Fig. 8A
- Der Ausdruck "test:" vor 0x100 stellt ein Label bzw. Etikett dar.
- Der Ausführungscode bei 0x100 drückt die Speicherung von Registerwerten aus.
- Der Ausführungscode bei 0x104 drückt einen Aufruf des Unterprogramms " mit" aus.
- Der Ausführungscode bei 0x108 drückt die Substitution des momentanen Werts "12" in ein Register D2 aus.
- Der Ausführungscode bei 0x10C drückt die Multiplikation von Register D2 und dem Wert 100 und die Substitution des Ergebnisses in das Register D2 aus.
- Der Ausdruck "Loop:" zwischen 0x10C und 0x110 stellt ein Label dar.
- Der Ausführungscode bei 0x110 drückt einen Aufruf des Unterprogramms "_getData 1" aus.
- Der Ausführungscode bei 0x114 stellt die Substitution des gespeicherten Werts des Registers D0 in das Register D3 dar, um den Rückführungswert der Funktion zu übertragen.
- Der Ausführungscode bei 0x118 stellt die Substitution des gespeicherten Werts des Registers D2 in das Register D0 dar, um ein Argument zu übertragen.
- Der Ausführungscode bei 0x11C drückt einen Aufruf des Unterprogramms "g1" aus.
- Der Ausführungscode bei 0x120 drückt die Substitution des gespeicherten Werts des Registers D3 aus, um ein Argument in das Register D0 zu übertragen.
- Der Ausführungscode bei 0x124 drückt einen Aufruf des Unterprogramms "g2" aus.
- Der Ausführungscode bei 0x128 drückt die Substitution des gespeicherten Werts des Registers D3 aus, um ein Argument in das Register D0 zu übertragen.
- Der Ausführungscode bei 0x12C drückt einen Aufruf des Unterprogramms "g3" aus.
- Der Ausführungscode bei 0x130 drückt einen Sprung zu dem Label "Loop:" aus.
- Der Ausführungscode bei 0x134 drückt ein erneutes Speichern der Registerwerte aus.
- Der Ausführungscode bei 0x138 drückt eine Rückführung von dem Unterprogramm "test" zu der Funktion aus, die den Aufruf vornahm.
- Wenn das Programm in dem internen Ausdruck-Zustand in einen Ausführungscode durch die Code-Erzeugungseinheit 110 konvertiert worden ist, schreibt die Zeilenadressen- Informationserzeugungseinheit 111 die Zeilenadresseninformationen, die die Beziehung zwischen Zeilen in dem Programm und den Adressen des erzeugten Ausführungscodes darstellen, in die Zeilenadressenspeichereinheit 1041. Sie gibt auch Informationen, sich auf die Beziehung zwischen Funktionen und Adressen beziehend, und Informationen, die sich auf die Variablen in Funktionen beziehen, in die Funktionsinformations- Speichereinheit 1042 hinein aus. Als Folge wird der Inhalt der Fehlersuchinformations- Speichereinheit 104 so, wie dies in Fig. 8B dargestellt ist.
- Das Nachfolgende ist eine Erläuterung für den Aufbau der Fehlersuchvorrichtung der vorliegenden Erfindung, und zwar unter Bezugnahme auf Fig. 4. Diese Fehlersuchvorrichtung ist aus einer Eingabeeinheit 201, einer Beurteilungseinheit 202 für eine bewegte/gelöschte Variable, einer Unterbrechungspunkt-Einstelleinheit 203, einer Grundstruktur- Kombiniereinheit 204, einer Kombinations-Aktivierungs-Beurteilungseinheit 205, einer Code-Ausführungseinheit 206, einer Variable-Operationseinheit 207, einer Ausgabeeinheit 208, einer Zeilenanzeigeeinheit 209, einer Zeileninformationsanzeigeeinheit 210, einer Betriebs-Möglichkeit-Variable-Anzeigeeinheit 211, einer Optimierungsprozessanzeigeeinheit 212, einer Umschalteinheit 213 für eine variable Reihenfolge, einer Variable- Automatik-Anzeigeeinheit 214 und einer Steuereinheit 215 für eine verknüpfte Anzeige aufgebaut.
- Die Eingabeeinheit 201 zeigt eine Befehlszeile auf der Anzeige 502 an und interpretiert eine Benutzereingabe einer "Variable to be viewed" ("Variable, die betrachtet werden soll") oder "Variable to be set and setting value" ("Variable, die eingestellt werden soll und Einstellwert"), vorgenommen unter Verwendung eines Tastenfelds. Diese Interpretation der Befehlszeile durch die Eingabeeinheit 201 wird in einem "show value of variable*on Line **" und "Set value of variable* on Line ** at **" Format durchgeführt. Eine beispielhafte Anzeige auf der Anzeige 502 ist in Fig. 9A dargestellt, wobei die Befehlszeile an der Position angeordnet ist, die durch einen Pfeil y21 angezeigt ist und sich in einem Zustand befindet, wo sie auf eine Benutzereingabe wartet.
- Die Beurteilungseinheit 202 für eine bewegte/gelöschte Variable untersucht, ob dort eine Möglichkeit der Einstellung oder eine Referenz einer Variablen, eingegeben in die Eingabeeinheit 201, aufgrund der Effekte einer Optimierung, verhindert ist.
- Das Nachfolgende ist eine detaillierte Erläuterung des vorstehenden Prozesses unter Bezugnahme auf das Flußdiagramm in Fig. 10. Im Schritt S1 wird die Untersuchungsobjektzeile initialisiert, so dass die Untersuchungsobjektzeile als die erste Zeile in einer Funktion gesetzt wird (diese Funktion ist die Funktion, die die Zeile umfasst, an der die Ausführung momentan gestoppt worden ist). Im Schritt S2 wird das Programm von der Programmspeichereinheit 101 erhalten und es wird untersucht, ob eine Variable, die die Variable ist, angezeigt durch die Eingabeeinheit 201 für eine Referenz oder Einstellung, in der Untersuchungsobjektzeile vorhanden ist, und falls sie nicht vorhanden ist, wird die Beurteilung "NEIN" im Schritt S3 abgegeben, so dass die Verarbeitung zu Schritt S11 fortschreitet. Im Schritt S11 wird beurteilt, ob die Untersuchungsobjektzeile die Abschlußzeile in der Funktion ist, und falls nicht, schreitet die Verarbeitung zu Schritt S12 fort, der ein Erhöhungsschritt ist, in dem die nächste Zeile als Untersuchungsobjektzeile eingestellt wird, bevor die Verarbeitung zu Schritt S2 zurückkehrt.
- Die Verarbeitung in den Schritten S2, S3, S11 und S12 wird wiederholt, bis die Beurteilung "JA" im Schritt S3 erfolgt, was bedeutet, bis eine Zeile, die die Variable umfasst, angezeigt durch die Eingabeeinheit 201, erreicht ist. Wenn einmal die Beurteilung "JA" im Schritt S3 abgegeben ist, wird die Grundstruktur für die entsprechende Zeile im Schritt S4 untersucht und einer der Schritte S6, S8 und S10 wird selektiv basierend auf der Art dieser Grundstruktur durchgeführt. Diese Auswahl wird durch progressives Durchführen der Beurteilungen in den Schritten S5, S7 und S9 vorgenommen, bis die Beurteilung "JA" abgegeben wird.
- Die Untersuchung einer Grundstruktur im Schritt S4 wird durchgeführt, indem die Grundstruktur von der Grundstruktur-Speichereinheit 102 erhalten wird, und durch Beurteilen, ob die Untersuchungsobjektzeile während einer Optimierung bewegt wird, wird während einer Optimierung gelöscht, oder enthält eine Variable, die während einer Optimierung gelöscht ist.
- Falls die Grundstruktur eine Grundstruktur einer "moved line" ("bewegten Linie") ist, wird die Beurteilung "JA" im Schritt S5 abgegeben, und Informationen über die Bewegung von welcher Zeile zu welcher Zeile wird von der Grundstruktur erhalten, was eine Indikation ist, die zu der Ausgabeeinheit 208 abgegeben wird, um "Zeile XXX, umfassend die bearbeitete Variable bis zu Zeile YYY" bewegt worden ist. Die Variable wird nicht eingestellt oder auf diese in dem Programm Bezug genommen" zu der Anzeige 502 auszugeben. Hierbei ist Zeile XXX die Untersuchungsobjektzeile und Zeile YYY ist die Bewegungsbestimmungszeile.
- Wenn die Beurteilung "NEIN" im Schritt S5 abgegeben ist und die Beurteilung "JA" im Schritt S7 abgegeben ist, wird eine Anzeige im Schritt S8 zu der Ausgabeeinheit 208 ausgegeben, um "Zeile XXX, umfassend die bearbeitete Variable ist gelöscht worden. Die Variable wird nicht eingestellt oder auf diese Bezug genommen wie in dem Programm" zu der Anzeige 502 auszugeben. Hierbei ist Zeile XXX die Untersuchungsobjektzeile.
- Falls die Beurteilung "NEIN" im Schritt S7 abgegeben ist und die Beurteilung "JA" im Schritt S9 abgegeben ist, wird eine Anzeige im Schritt S8 zu der Ausgabeeinheit 208 abgegeben, um "bearbeitete Variable ist von Zeile XXX gelöscht worden. Die Variable wird nicht eingestellt oder auf diese Bezug genommen wie in dem Programm" zu der Anzeige 502 ausgegeben. Hierbei ist Zeile XXX die Untersuchungsobjektzeile.
- Indem die Operation in den Schritten S6, S8 und S10 selektiv durchgeführt sind, wird eine Beurteilung vorgenommen, ob die Variable, für die der Benutzer wünscht, eine Operation vorzunehmen, in einer bewegten oder gelöschten Zeile umfasst ist, und falls dies der Fall ist, wird der Benutzer über eine gelöschte oder bewegte Zeile informiert und so, dass es nicht möglich sein kann, auf die Variable wie in dem Programm Bezug zu nehmen oder diese einzustellen.
- Die Unterbrechungspunkt-Einstelleinheit 203 empfängt eine Unterbrechungspunktanzeige von dem Benutzer, die in Zeileneinheiten vorgenommen ist, wandelt den angezeigten Unterbrechungspunkt in eine Adresse in dem Ausführungscode um und stellt einen Unterbrechungspunkt an der konvertierten Adresse in dem Ausführungscode ein. Wenn ein solcher Unterbrechungspunkt auf einer Zeile eingestellt ist, ist dabei eine Gefahr vorhanden, dass die angezeigte Zeile eine bewegte Zeile sein kann. Dementsprechend empfängt die Unterbrechungspunkt-Einstelleinheit 203 Informationen von der Grundstruktur- Speichereinheit 102 und beurteilt, ob die angezeigte Zeile eine bewegte Zeile ist. Falls die angezeigte Zeile eine bewegte Zeile ist, gibt sie der Ausgabeeinheit 208 eine Anzeige an, um eine Anzeige, die darstellt, dass die Ausführungsreihenfolge nicht dieselbe wie bei dem originalen Programm ist, auszugeben.
- Der Algorithmus der Unterbrechungspunkt-Einstelleinheit 203 wird in weiterem Detail nachfolgend, unter Bezugnahme auf das Flußdiagramm in Fig. 11, erläutert. Hierbei wird der Fall, wenn der Benutzer von der Unterbrechungspunkt-Einstelleinheit 203 fordert, einen Unterbrechungspunkt bei der Substitutions-Angabe an Zeile 7 einzustellen, erläutert werden.
- Im Schritt S21 wird die Grundstruktur der Zeile, angezeigt durch den Benutzer, von der Grundstruktur-Speichereinheit 102 erhalten. Wenn die Zeile, angezeigt durch den Benutzer, Zeile 7 ist, wird die Zeile mit einer Grundstruktur "moved line" ("bewegte Zeile") versehen, so dass dies durch die Unterbrechungspunkt-Einstelleinheit 203 erhalten wird. Im Schritt S22 beurteilt die Unterbrechungspunkt-Einstelleinheit 203, ob sich die erhaltene Grundstruktur auf eine bewegte Zeile bezieht. Da Zeile 7 zu der Position, die Zeile 4 folgt, bewegt ist, erhält die Unterbrechungspunkt-Einstelleinheit 203 die Zeilenzahl YYY der Bewegungsbestimmung von der Grundstruktur für Zeile 7 und besitzt die Nachricht "angezeigte Zeile ist bewegt worden. Ausführung gehalten nach Ausführung von Zeile YYY". Da Zeile YYY Zeile 4 in dem vorliegenden Fall ist, wird "angezeigte Zeile 7 ist zu Zeile 4 bewegt worden. Ausführung gehalten, nach Ausführung von Zeile 4" angezeigt.
- Nach einer Anzeige wird die Adresse des Ausführungscodes entsprechend der Zeile in dem Programm, angezeigt im Schritt S24, von der Zeilenadressen-Speichereinheit 1041 erhalten. In dem vorliegenden Fall wird die Adresse 0x104 von der Fehlersuchinformations-Speichereinheit 104 erhalten und im Schritt S25 wird eine Instruktion, die eine Unterbrechung verursacht, in die erhaltene Adresse geschrieben. Indem dies so vorgenommen wird, wird ein Unterbrechungspunkt an der Adresse 0x104 eingestellt.
- Die Grundstruktur-Kombiniereinheit 204 untersucht, welche Resourcen zu Variablen durch Nachvollziehen der Grundstrukturen zugeordnet worden sind, die den Optimierungsprozess darstellen, gespeichert in der Grundstruktur-Speichereinheit 102, und zu welchen Positionen Zeilen abschließend bewegt sind. Hierbei werden, falls eine Variable, die untersucht werden soll, Variable ist, die von dem Programm durch den Optimierungsprozess gelöscht ist, wird die Variable, die verwendet ist, um die Variable zu ersetzen, und die Resource, die zu dieser Substitut-Variablen zugeordnet ist, erhalten.
- Als ein Beispiel wird angenommen, dass die Variable, die untersucht werden soll, die Variable z ist. Durch Sehen auf die Grundstruktur von Zeile 1, die das Ersetzen von der Variablen z darstellt, kann gesehen werden, dass die Variable z gegen die Variable x ersetzt ist. Durch Sehen auf die Grundstrukturen, die eine Resource-Zuordnung darstellen, kann gesehen werden, dass das Register D3 die Resource für diese Variable x ist. Durch Kombinieren dieser Grundstrukturen kann die Beziehung "Variable z" ="Variable x" = "Register D3" gesehen werden und die neue Information "Variable z" ="Register D3" wird erhalten. Wenn einmal diese Informationen erhalten worden sind, werden sie in die Grundstruktur- Speichereinheit 102 in dem Format "Kombination z:D3" geschrieben und die zweite und die folgenden Kombinationen können weggelassen werden.
- Die Kombinations-Aktivierungs-Beurteilungseinheit 205 beurteilt, ob die Kombination von Grundstrukturen durchgeführt werden sollte, wenn die Fehlersuchvorrichtung aktiviert ist und wenn auf eine Variable Bezug genommen wird. Wenn die Kombinations-Aktivierungs- Beurteilungseinheit 205 beurteilt, dass die Kombination von Grundstrukturen durchgeführt werden sollte, wenn die Fehlersuchvorrichtung aktiviert ist, aktiviert sie die Grundstruktur- Kombiniereinheit 204 und hat Grundstrukturen für alle Zeilen kombiniert, bevor eine Benutzeranzeige für die Referenz einer Variablen eingegeben ist. Alternativ kombiniert sie, wenn sie beurteilt, dass die Kombination von Grundstrukturen durchgeführt werden sollte, wenn auf eine Variable Bezug genommen wird, die Grundstrukturen für eine momentane Zeile nur, wenn der Benutzer eine Anzeige eingibt, die sich auf die Referenz einer Variablen bezieht. Die Beurteilung, dass eine Kombination durchgeführt werden sollte, wenn die Fehlersuchvorrichtung aktiviert ist, wird basierend auf dem Umfang von Grundstruktur- Informationen, der Zahl von Zeilen in dem Programm und der Codegröße des Ausführungscodes vorgenommen. In der vorliegenden Ausführungsform werden, wenn die Zahl von Zeilen in dem Programm eine vorbestimmte Zahl übersteigt, Grundstrukturen kombiniert, wenn die Fehlersuchvorrichtung aktiviert ist. Für das Beispiel-Programm in Fig. 5A wird, da das Programm über 10 Zeilen lang ist, die Beurteilung vorgenommen, um eine Kombination von Grundstrukturen entsprechend einer Benutzeroperation durchzuführen. Wenn eine Benutzeroperation für eine Variable durchgeführt werden soll, gibt die Variable- Operationseinheit 207 eine Steueranzeige zu der Code-Ausführungseinheit 206 entsprechend der angezeigten Operation aus. Diese "Benutzeroperation einer Variablen" wird durch die Eingabeeinheit 201 empfangen, wobei dort zwei Typen einer Benutzeroperation "settlement" ("Einstellen") und "reference" ("Referenz") vorhanden sind.
- Wenn die Eingabeeinheit 201 eine Anzeige für eine Referenz einer Variablen empfängt, nimmt die Variable-Operationseinheit 207 auf die Korrespondenzbeziehungen zwischen Variablen und Resourcen, umfasst in den Grundstrukturen, gespeichert in der Grundstruktur-Speichereinheit 101, Bezug, und gibt eine Anzeige zu der Code- Ausführungseinheit 206 aus, um den Wert einer Resource entsprechend zu der angezeigten Variablen abzurufen. Indem so instruiert wird, ruft die Code-Ausführungseinheit 206 den Wert der Resource ab und die Variable-Operationseinheit 207 gibt eine Anzeige zu der Ausgabeeinheit 208 ab, um den Variable-Namen zusammen mit dem abgerufenen Wert anzuzeigen.
- Beim Empfangen einer Variablen durch Einstellen der Anzeige, und eines Variable- Namens und eines erwünschten Werts von der Eingabeeinheit 201, nimmt die Variable- Operationseinheit 207 auf die entsprechenden Beziehungen zwischen Variablen und Rez sourcen, umfasst in den Grundstrukturen, gespeichert in der Grundstruktur- Speichereinheit 201, Bezug und gibt eine Anzeige zu der Code-Ausführungseinheit 206 ab, um den Wert einer Resource entsprechend der angezeigten Variablen an dem erwünschten Wert einzustellen. Bei diesem Vorgang instruiert, wenn die Variable, angezeigt durch den Benutzer, eine ersetzte Variable ist, die Variable-Operationseinheit 207 die Ausgabeeinheit 208, eine Anzeige auszugeben, die zeigt, dass sich der Wert einer ersetzten Variablen geändert hat.
- Wenn, zum Beispiel, der Benutzer eine Anzeige für eine Referenz der Variablen z in dem Beispiel-Programm der Fig. 5A angibt, lernt die Variable-Operationseinheit 207 von den Grundstrukturen, gespeichert in der Grundstruktur-Speichereinheit 102, dass die Resource, zugeordnet zu der Variablen z, Register D3 ist, so dass die Variable-Operationseinheit 207 die Code-Ausführungseinheit 206 instruiert, den Wert des Registers D3 abzurufen, der den Wert einer Variablen z ausdrückt. Wenn einmal die Code-Ausführungseinheit 206 den Wert "12" des Registers D3 abgerufen hat, instruiert die Variable-Operationseinheit 207 die Ausgabeeinheit 208, "Wert von Variable z ist 12" anzuzeigen. Gleichzeitig nimmt die Variable-Operationseinheit 207 auf die Grundstrukturen in der Grundstruktur- Speichereinheit 102 Bezug, die sich auf ein Ersetzen beziehen, und lernt, dass die Variable z gegen die Variable x ersetzt wird, so dass sie die Ausgabeeinheit 208 instruiert, "Variable x, verwendet, um Variable z zu ersetzen, so dass sich der Wert der Variablen x auch ändert" anzuzeigen.
- Die Code-Ausführungseinheit 206 kann aus entweder einem Simulator, einem schaltungsinternen Emulator oder einem Monitor aufgebaut sein, so dass, unter Verwendung der Merkmale, die einzigartig für Simulatoren, schaltkreisinterne Emulatoren oder Monitore sind, die Hardware-Umgebung der Target-Maschine wieder hergestellt werden kann, und eine Mehrzahl von Elementen eines Ausführungscodes, gespeichert in der Speichereinheit 103 für den erzeugten Code, kann aufeinanderfolgend in dieser Hardware-Umgebung ausgeführt werden, bis ein Unterbrechungspunkt, eingestellt durch die Unterbrechungspunkt-Einstelleinheit 203, erreicht ist. Beim Erreichen eines Unterbrechungspunkts wird ein Zugriff auf eine Resource in der vorliegenden Hardware-Umgebung entsprechend der Anzeige durch die Variable-Operationseinheit 207 durchgeführt.
- Hierbei haben, während dabei Unterschiede zwischen den Hardware-Umgebungen eines Simulators, eines schaltkreisinternen Emulators und eines Monitors vorhanden sind (während die Hardware-Umgebungen für einen Monitor oder einen schaltkreisinternen Emulator dieselben sind oder sehr nahe zu denjenigen der realen Maschine liegen, die Hardware-Umgebung für einen Simulator nur ein Modell ist, das an einem Host-Computer erzeugt ist), alle drei Hardware-Umgebungen einen gemeinsamen Aspekt dahingehend, dass sie die Funktionen der Datenregister D0, D1, D2 und D3, der Adressenregister A0, A1, A2 und A3, des Programmzählers PC und des Stapelspeicher-Hinweiszeigers SP, die in dem Hardware-Modell von Fig. 7 dargestellt sind, wieder erzeugen.
- Das Flußdiagramm in Fig. 13 stellt die Details der Verarbeitung, durchgeführt durch die Code-Ausführungseinheit 206, dar. Im Schritt S71 wartet die Unterbrechungspunkt- Einstelleinheit 203 auf den Benutzer, dass der Ausführungscode ausgeführt ist, und wenn der Benutzer eine solche Anzeige abgibt, schreitet die Verarbeitung zu Schritt S72 fort, wo die erste Adresse "0x100", gespeichert in der Speichereinheit 103 für den erzeugten Code, in dem Programmzähler eingestellt wird. Als nächstes wird, im Schritt S73, der Code an .der Adresse, gespeichert in dem Programmzähler, von der Speichereinheit 103 für den erzeugten Code abgerufen, und es wird beurteilt in dem Schritt S74, ob der abgerufene Ausführungscode mit einer Instruktion angehängt versehen ist, die eine Unterbrechung bewirkt. Hierbei ist eine "Instruktion, die eine Unterbrechung verursacht", eine Instruktion, die an einer Unterbrechungspunkt-Einstellbestimmungsadresse durch die Unterbrechungspunkt-Einstelleinheit 203 geschrieben worden ist. Falls eine solche Instruktion an der Adresse "Ox10C" geschrieben ist, ist die Beurteilung im Schritt S74, wenn der Ausführungscode an der Adresse "0x100" abgerufen worden ist, "NEIN", so dass der Ausführungscode an der Adresse "0x100", angezeigt durch den Programmzähler, im Schritt S75 ausgeführt wird. Als Folge werden die gespeicherten Werte der Datenregister und der Adressenregister in dem Hardware-Modell, dargestellt in Fig. 7, in dem Stapelspeicher gesichert. Nach der Sicherung wird der Programmzähler auf "0x104" im Schritt S76 erhöht und die Verarbeitung kehrt zu Schritt S73 zurück.
- Im Schritt S73 wird der Code an der Adresse "0x104", gespeichert in dem Programmzähler, von der Speichereinheit 103 für den erzeugten Code abgerufen, und es wird im Schritt S74 beurteilt, ob der abgerufene Ausführungscode mit einer Instruktion angehängt versehen worden ist, die eine Unterbrechung bewirkt. Dies ist nicht der Fall, so dass die Beurteilung "NEIN" abgegeben wird, und der Ausführungscode, abgerufen von der Adresse "0x104", wird im Schritt S75 ausgeführt. Beim Ausführen dieses Ausführungscodes wird zuerst der Code "call_init" decodiert und die Startadresse von "mit" wird in dem Programmzähler gespeichert, bevor der Programmzähler auf "0x108" im Schritt S76 erhöht wird, und die Verarbeitung kehrt zu Schritt S73 zurück. Es sollte hier angemerkt werden, dass die Verarbeitung der Code-Ausführungseinheit 206 tatsächlich zu der Verarbeitung für das Unterprogramms "mit" umgeschaltet werden muß, obwohl, zum einfacheren Verständnis, die Code-Ausführungseinheit 206 hier als nur zu der nächsten Adresse "0x108" fortschreitend, in Fig. 8A, beschrieben ist.
- Im Schritt S73 wird der Code an der Adresse "0x108", gespeichert in dem Programmzähler, von der Speichereinheit 103 für den erzeugten Code abgerufen und es wird im Schritt S74 beurteilt, ob der abgerufene Ausführungscode mit einer Instruktion angehängt versehen worden ist, die eine Unterbrechung verursacht. Dies ist nicht der Fall, so dass die Beurteilung "NEIN" abgegeben wird, und der Ausführungscode, abgerufen von der Adresse "0x108", wird im Schritt S75 ausgeführt. Beim Durchführen dieser Ausführung wird der Ausführungscode "mov 12, D2" an der Adresse "0x108" decodiert und der unmittelbare Wert 12 wird in dem Datenregister D2 gespeichert, bevor der Programmzähler auf "0x10C" im Schritt S76 erhöht wird, und die Verarbeitung kehrt zu Schritt S73 zurück.
- Im Schritt S73 wird der Code an der Adresse "0x10C", gespeichert in dem Programmzähler, von der Speichereinheit 103 für den erzeugten Code, abgerufen, und es wird im Schritt S74 beurteilt, ob der abgerufene Ausführungscode mit einer Instruktion angehängt versehen worden ist, die eine Unterbrechung verursacht. Da dies der Fall für den Ausführungscode an der Adresse "0x10C" ist, wird die Beurteilung "JA" im Schritt S74 abgegeben, und der Ausführungscode an der Adresse "0x10C", gespeichert in dem Programmzähler, wird im Schritt S77 ausgeführt. Beim Durchführen dieser Ausführung wird der Ausführungscode "mul 100 D2" an der Adresse "Ox10C" decodiert, die ALU führt die Multiplikation des gespeicherten Werts des Datenregisters D2 und des unmittelbaren Werts 100 durch, und das Ergebnis "1200" wird in dem Datenregister D2 gespeichert, bevor die Verarbeitung zu Schritt S78 fortschreitet.
- Im Schritt S78 wird ein Unterbrechungssignal entsprechend der Unterbrechungsinstruktion, gespeichert an der Adresse "0x10C", erzeugt, und die Code-Ausführungseinheit 206 schaltet die Steuerung zu der Eingabeeinheit 201 um. Durch Umschalten der Steuerung zu der Eingabeeinheit 201 wird die Befehlszeile, beschrieben vorstehend, in deren Eingabeempfangszustand angezeigt. Hierbei nimmt, wenn die Code-Ausführungseinheit 206 eine Anzeige für eine Referenz einer Variablen von dem Benutzer aufnimmt, die Variable- Operationseinheit 207 auf die Grundstruktur-Speichereinheit 102 Bezug, um zu finden, welche Resource der angezeigten Variablen zugeordnet worden ist, und instruiert die Code-Ausführungseinheit 206, den gespeicherten Wert dar angezeigten Resource abzurufen.
- In den Schritten S79 und S80 wartet die Code-Ausführungseinheit 206 auf eine Anzeige, um den Wert einer Resource abzurufen, und, beim Empfangen einer solchen Anzeige, wird die Beurteilung "JA" im Schritt S79 abgegeben und die Verarbeitung schreitet zu Schritt S81 fort, wo die Code-Ausführungseinheit 206 auf das Register oder die Speicheradresse, angezeigt durch den Resourcennamen, zugreift und den Wert der Resource zu der Variable-Operationseinheit 207 ausgibt.
- Wenn eine Anzeige zum Einstellen des Werts einer Resource in dem Eingabeempfangszustand empfangen ist, wobei die Befehlszeile gerade angezeigt wird, nimmt die Variable- Operationseinheit 207 auf die Grundstruktur-Speichereinheit 102 Bezug, um die Resource zu finden, die der angezeigten Variablen zugeordnet worden ist, bevor die Code- Ausführungseinheit 206 instruiert wird, den gespeicherten Wert der Resource, die in Rede steht, an dem erwünschten Wert einzustellen.
- Wenn einmal eine Anzeige zum Einstellen eines Resource-Werts vorhanden gewesen ist, wird die Beurteilung "JA" im Schritt S80 abgegeben, und die Verarbeitung schreitet zu Schritt S81 fort, wo die Code-Ausführungseinheit 206 den erwünschten Wert in das Register oder die Speicheradresse schreibt, die dem angezeigten Resourcennamen entspricht. Die Ausgabeeinheit 208 zeigt Antworten auf die Operationen, vorgenommen durch den Benutzer über die Eingabeeinheit 201, in dem Ausgabefenster, entsprechend den Anzeigen von der Eingabeeinheit 201, der Beurteilungseinheit 202 für die bewegte/gelöschte Variable, der Unterbrechungspunkt-Einstelleinheit 203 und der Grundstruktur- Kombiniereinheit 204 an.
- Die Zeilenanzeigeeinheit 209 zeigt eine Liste, erstellt aus einer Mehrzahl von erzeugten Quellendateien, an, und wartet auf eine Anzeige durch den Benutzer von einem Unterprogramm, dessen Operation verifiziert werden soll. Beim Empfangen einer solchen Benutzeranzeige extrahiert die Zeilenanzeigeeinheit 209 die Quellencode-Angaben, umfasst in dem angezeigten Unterprogramm, und zeigt sie in einem fixierten Fenster an. Hiernach wird der Ausführungscode, umfasst in dem Maschinen-Sprachprogramm, das den anzeigen-Quellencode-Anweisungen entspricht, in dem Fenster, am nächsten zu den Quellencode-Anweisungen, angezeigt. Hierbei wird auch ein Pfeil angezeigt, um die Zeile anzuzeigen, die die momentane Ausführungshalteposition ist (die Zeile, wo die Unterbrechungspunkt-Einstelleinheit 203 einen Unterbrechungspunkt eingestellt hat).
- Die Zeileninformationsanzeigeeinheit 210 zeigt, in dem Zeileninformations-Anzeigefenster, die Grundstrukturen an, die zeigen, wie jede Zeile in dem Zeilenanzeigefenster optimiert worden ist, und zwar in einem punktuierten Format, das für den Benutzer verständlich ist. Das Zeileninformations-Anzeigefenster besitzt eine Anzahl von horizontalen Eintrittsreihen, die numeriert sind, um die Zeile des Programms zu zeigen, umfasst in dem Zeilenanzeigefenster, zu dem sie entsprechen. Durch Ausrichten der Eintritte in dem Zeilenanzeigefenster und dem Zeileninformations-Anzeigefenster ist der Benutzer in der Lage, zu verstehen, wie jede Zeile, angezeigt durch die Zeilenanzeigeeinheit 209, optimiert worden ist. Für das Beispiel, das in Fig. 9A dargestellt ist, zeigt das Zeileninformations- Anzeigefenster, dass Zeile 7 bewegt worden ist, und dass die Zeilen 3 und 9 gelöscht worden sind. Durch Anzeigen dieser Informationen kann der Benutzer bald verstehen, welche Teile des Programms er redundant schrieb.
- Die Anzeigeeinheit 211 für die operations-mögliche Variable zeigt Variable in jeder Zeile in dem Zeilenanzeigefenster an, die eingestellt werden körnen oder auf die Bezug genommen werden kann, mit einer Markierung in dem Operationsfenster für die operationsmögliche Variable. Das Operationsfenster für die operations-mögliche Variable besitzt Reihen, die zu jeder Reihe in dem Zeilenanzeigefenster ausgerichtet sind, wobei jeder Spalte eine der Variablen, verwendet in dem Programm, zugeordnet ist. Hierbei findet die Anzeigeeinheit 211 für die operations-mögliche Variable heraus, welche Variablen in welchen Zeilen durch den Benutzer eingestellt werden können oder auf die Bezug genommen werden kann, und fügt eine Markierung "O" zu solchen Zeilen hinzu, wenn eine Variable in einer Grundstruktur oder in Fehlersuchinformationen vorhanden ist, um die Variablen darzustellen, für die eine Referenz oder eine Einstellung möglich ist.
- Die Anzeigeeinheit 211 für eine operations-mögliche Variable führt eine Konversionssteuerung der Zeilenanzeigeeinheit 209 so durch, dass die Variablen, für die eine Referenz des gespeicherten Werts oder der Einstellung des gespeicherten Werts möglich sind, deutlich gesehen werden kann.
- Das Flußdiagramm in Fig. 12 stellt die Details des Algorithmus der Anzeigeeinheit 211 für die operations-mögliche Variable dar. In diesem Flußdiagramm ist 541 ein Initialisierungsschritt zum Einstellen des Untersuchungsbereichs für Variablen, so dass der Untersuchungsbereich auf die Variablen begrenzt ist, die durch die vorliegende Funktion verwendet sind, die aus der Funktionsinformations-Speichereinheit 1042 gefunden sind. Schritt 542 ist ein Initialisierungsschritt zum Einstellen der Untersuchungsobjektzeile, der die erste Zeile in dem Programm, angezeigt durch die Zeilenanzeigeeinheit 209, als die Untersuchungsobjektzeile einstellt. Im Schritt S43 verwendet die Anzeigeeinheit 211 für die operationsmögliche Variable die Grundstruktur-Kombiniereinheit 204, um zu untersuchen, ob eine Einstellung/Referenz für jede Variable, verwendet in der Funktion der Untersuchungsobjektzeile, möglich ist. Hierbei wird der Zustand "settlement possible" ("Einstellung möglich") als der Fall beurteilt, wenn eine Resource, entsprechend zu der Variablen, angezeigt durch die Eingabeeinheit 201, existiert. Ähnlich wird der Zustand "reference possible" ("Referenz möglich") als der Fall beurteilt, bei dem eine Resource entsprechend der Variablen, angezeigt durch die Eingabeeinheit 201, existiert, oder wenn die Variable durch eine andere Variable oder durch eine Konstante ersetzt worden ist.
- Wenn im Schritt S44 beurteilt ist, dass eine Einstellung oder Referenz für die Variable möglich ist, schreitet die Verarbeitung zu Schritt S45 fort, wo eine Markierung zu der Zeile, die die Untersuchungsobjektzeile ist, hinzugefügt wird.
- Schritt S46 ist ein Beendigungsbeurteilungsschritt, bei dem beurteilt wird, ob die Untersuchung für alle die Variablen in der Untersuchungsobjektzeile durchgeführt worden ist. Hierbei ist eine Variable vorhanden, die noch verbleibt, wobei die Verarbeitung zu Schritt S49 fortschreitet, wo die nächste Variable in der Untersuchungsobjektzeile ausgewählt wird und die Verarbeitung zu Schritt S43 zurückkehrt.
- Wenn, im Schritt S46, die Untersuchung für alle Variablen durchgeführt worden ist, schreitet die Verarbeitung zu Schritt S47 fort, wo beurteilt wird, ob die Untersuchung für alle Zeilen in dem Programm, angezeigt durch die Zeilenanzeigeeinheit 209, durchgeführt worden ist. Falls dies nicht der Fall ist, schreitet die Verarbeitung zu Schritt S48 fort, wo die nächste Zeile als die Untersuchungsobjektzeile ausgewählt wird, und die Verarbeitung kehrt zu Schritt S48 zurück.
- Die Variable-Reihenfolge-Umschalteinheit 213 schaltet die Zeilenanzeige des Programms entsprechend den Benutzeranzeigen um. Zwei Typen von Benutzeranzeigen, "Anzeige in einer Programmreihenfolge" und "Anzeige in einer bewegten Reihenfolge nach einer Optimierung", sind möglich. Falls der Benutzer eine Anzeige "Anzeige in einer bewegten Reihenfolge nach einer Optimierung" abgibt, zeigt die Variable-Reihenfolge-Umschalteinheit 213 Zeilen nach einem ersten Bewegen davon entsprechend den Grundstrukturen in der Grundstruktur-Speichereinheit 102 an, was die Bewegung von Zeilen zu Positionen, anderen Zeilen folgend, wiedergibt. Hierbei sind die Reihenfolge der angezeigten Zeilen durch die Zeileninformationsanzeigeeinheit 210 und die Anzeigeeinheit 211 für die operationsmögliche Variable ähnlich umgeordnet.
- Die Variable-Automatik-Anzeigeeinheit 214 zeigt die Werte von Variablen in der Zeile an, wo eine Ausführung gehalten ist, und den Optimierungsprozess, unter Verwendung der Grundstruktur-Kombiniereinheit und der Variable-Betriebseinheit.
- Die Steuereinheit 215 für eine verknüpfte Anzeige führt eine Anzeigesteuerung so durch, dass der Benutzer in der Lage sein wird, augenblicklich die Korrespondenz zwischen dem Ausführungscode in der Nähe des Unterbrechungspunkts und der Zeilen des Programms zu erkennen. Hierbei ändert, wenn die Anzeigestartlinie geändert wird, die Steuereinheit 215 für die verknüpfte Anzeige die Anzeigestartposition von sowohl dem Programm als auch von dem Ausführungscode zusammen. Hierbei werden Aufwärts- und Abwärts- Cursor-Tasten als Anzeigeverfahren der Zeilen, die angezeigt werden sollen, verwendet. Wenn der Benutzer eine Anzeige für eine verknüpfte Anzeige des Programms und des Ausführungscodes abgibt, wird der Prozess, dargestellt durch die Flußdiagramme in Fig. 14A und 14B, begonnen. Im Schritt S51 wird der Anzeigebereich in zwei Bereiche unterteilt, das Programm, erhalten von der Programmspeichereinheit 101, wird in dem Programmanzeigerahmen angezeigt und der Ausführungscode, erhalten von der Speichereinheit 103 für den erzeugten Code, wird in dem Anzeigecode-Anzeigerahmen angezeigt.
- Im Schritt S52 wird die Anzeigestartposition von dem Ausdruck "Anzeigestartlinie = Ausführungshaltlinie - 3" erhalten, und wird als die Startzeile für die Anzeige des Programms durch die Zeilenanzeigeeinheit 209 eingestellt. Falls die momentane Haltelinie für die Beispiel-Anzeige von Fig. 9A Zeile 10 ist, wird die Anzeigestartzeile von der Programmanzeige in der verknüpften Anzeigezeile 7 sein.
- Im Schritt S53 wird die Adresse des Ausführungscodes, der der Einstellstartzeile der Programmanzeige entspricht, von der Zeilenadressen-Speichereinheit 1041 erhalten und wird als die Anzeigestartadresse des Ausführungscodes für die Zeilenanzeigeeinheit 209 eingestellt. In dem vorliegenden Beispiel wird der Wert der Adresse für Zeile 7 von den Zeilenadresseninformationen in der Fehlersuchinformations-Speichereinheit 104 erhalten, was in diesem Fall die Adresse "0x108" ergibt. Als Folge wird eine Anzeige zu der Zeilenanzeigeeinheit 209 gegeben, um das Programm, beginnend von Zeile 7, und den Ausführungscode, beginnend von der Adresse "0x108", anzuzeigen.
- Im Schritt S54 wird die Zeile in der Programmanzeige der Zeilenanzeigeeinheit 209, die die Ausführungshaltezeile ist, in einem Invers-Video als die Anfangs-Invers-Video-Position angezeigt. In dem vorliegenden Beispiel wird die Ausführungs-Halte-Position Zeile 10 in dem Invers-Video angezeigt.
- Im Schritt S55 wird die Adresse des Ausführungscodes, entsprechend zu der Invers- Video-Zeile in der Programmanzeige, von der Zeilenadressen-Speichereinheit 1041 erhalten, und die Zeilenanzeigeeinheit 210 wird so gestaltet, um den Ausführungscode an der erhaltenen Adresse in dem Invers-Video anzuzeigen. (n dem vorliegenden Beispiel wird die Adresse "0x120" von der Zeilenadressen-Speichereinheit 1041 für Zeile 10 erhalten, so dass die Zeilenanzeigeeinheit 209 instruiert wird, den Ausführungscode an der Adresse "0x120" in einem Invers-Video anzuzeigen. Das Ergebnis des vorliegenden Beispiels ist in Fig. 15A dargestellt.
- Im Schritt S56 wird der Pfeil, der die Ausführungs-Halte-Position in der Zeilenanzeigeeinheit 209 darstellt, auf die momentane Haltezeile eingestellt. In dem vorliegenden Beispiel ist die momentane Haltezeile die Zeile 10, sodass ein Pfeil, der dies darstellt, an der Zeile 10 angezeigt wird.
- Das Nachfolgende ist eine Erläuterung des Algorithmus, verwendet dann, wenn der Benutzer die Aufwärts- oder Abwärts-Cursor-Taste niederdrückt, und zwar unter Bezugnahme auf das Flußdiagramm in Fig. 14B.
- Die Schritte 557 und 558 werden durchgeführt, um zu erfassen, ob die Aufwärts-Cursor- Taste oder die Abwärts-Cursor-Taste jeweils niedergedrückt worden sind.
- Wenn die Abwärts-Cursor-Taste erfaßt ist, schreitet die Verarbeitung zu Schritt S59 fort, wo der Invers-Video-Teil der Programmanzeige durch die Zeilenanzeigeeinheit 209 zu der nächsten, niedrigeren Zeile bewegt wird, während dann, wenn die Aufwärts-Cursor-Taste erfaßt ist, die Verarbeitung zu Schritt S62 fortschreitet, wo der Invers-Video-Teil der Programmanzeige durch die Zeilenanzeigeeinheit 209 zu der nächsten, höheren Zeile bewegt wird.
- In den Schritten S60 und S63 wird beurteilt, ob die Invers-Video-Zeile über die Programmanzeige der Zeilenanzeigeeinheit 209 an der Oberseite oder der Unterseite jeweils hinaus bewegt worden ist. In der Beispiel-Anzeige der Fig. 15A wird die Zeilenanzeigeeinheit 209 in einen Programmanzeigerahmen und einen Ausführungscodeanzeigerahmen unterteilt, wobei der Programmanzeigerahmen den Programmbereich von Zeile 8 zu Zeile 13 darstellt. Wenn der Programmanzeigerahmen auf einen solchen schmalen Bereich begrenzt ist, ist es einfach für die Invers-Video-Zeile, um über die Programmanzeige hinaus bewegt zu werden, so dass eine solche Bewegung über die momentane Programmanzeige hinaus in den Schritten S60 und S63 erfaßt wird.
- Die Schritte S61 und S64 sind die jeweiligen Vorgänge, die ausgeführt werden, wenn die Invers-Video-Zeile in einem der Schritte S60 und S63 dahingehend bestimmt ist, dass sie über die Programmanzeige hinaus bewegt worden ist. Wenn im Schritt S60 bestimmt ist, dass sich die Invers-Video-Zeile über die Programmanzeige hinaus befindet, wird, im Sehritt S61, die Startzeile der Programmanzeige durch die Zeilenanzeigeeinheit 209 um eine Zeile erhöht. Für das Beispiel, dargestellt in Fig. 15A, wird, wenn die Invers-Video- Zeile über die Unterseite der Programmanzeige von Zeile 8 zu Zeile 13 hinaus bewegt worden ist, die Startzeile für die Programmanzeige um 1 erhöht, um zu Zeile 9 zu kommen, so dass der Bereich von 5 Zeilen, beginnend von Zeile 9, was bedeutet Zeile 9 bis 14, durch die Zeilenanzeigeeinheit 209 angezeigt wird. Auf diese Art und Weise läuft das Programm nach unten.
- Andererseits wird, wenn im Schritt S63 bestimmt ist, dass sich die Invers-Video-Zeile oberhalb der Programmanzeige befindet, im Schritt S64 die Startzeile der Programmanzeige durch die Zeilenanzeigeeinheit 209 um eine Zeile erhöht. Für das Beispiel, das in Fig. 15A dargestellt ist, wird, wenn die Invers-Video-Zeile über die Oberseite der Programmanzeige von Zeile 8 zu Zeile 13 hinaus bewegt worden ist, die Startzeile für die Programmanzeige um 1 erniedrigt, um zu Zeile 7 zu kommen, so dass ein Bereich von 5 Zeilen, beginnend von Zeile 7 an, was bedeutet, Zeilen T bis 12, durch die Zeilenanzeigeeinheit 209 angezeigt wird. Auf diese Art und Weise läuft das Programm nach unten. Besonders zu erwähnen ist hier, dass, wenn eine neu ausgewählte Invers-Video-Zeile oder eine Startzeile bereits bewegt oder gelöscht worden ist, sie nicht länger in der Zeilenadressen-Speichereinheit 1041 vorhanden sein wird. Allerdings berücksichtigt die Steuereinheit 215 für die verknüpfte Anzeige auch den Fall, wenn solche Zeilen nicht in der Zeilenadressen-Speichereinheit 1041 vorhanden sind.
- Genauer gesagt wird, im Schritt S65, beurteilt, ob eine Adresse entsprechend zu der Startzeile in der Zeilenadressen-Speichereinheit 1041 der Fehlersuchinformations- Speichereinheit 104 gespeichert ist. Falls eine solche Adresse gespeichert ist, wird die Adresse des Ausführungscodes entsprechend zu der eingestellten Startzeile für die Programmanzeige von der Zeilenadressen-Speichereinheit 1041 erhalten und wird als die Anzeigestartadresse für die Ausführungscodeanzeige durch die Zeilenanzeigeeinheit 209 eingestellt.
- Im Schritt S66 wird bestimmt, ob Adressen entsprechend zu der Startzeile und der Invers- Video-Zeile durch die Zeilenadressen-Speichereinheit 1041 der Fehlersuchinformations- Speichereinheit 104 gespeichert sind, und, falls dies der Fall ist, wird die Adresse des Ausführungscodes, die der eingestellten Invers-Video-Zeile der Programmanzeige entspricht, von der Zeilenadressen-Speichereinheit 1041 erhalten, und der Ausführungscode an dieser Adresse in der Ausführungscodeanzeige der Zeilenanzeigeeinheit 209 wird in einem Invers-Video angezeigt.
- Im Schritt S67 wird ein Pfeil, der die momentane Ausführungs-Halte-Position darstellt, an einer geeigneten Position durch die Zeilenanzeigeeinheit 209 eingestellt.
- Hierbei wird, wenn es der Benutzer wünscht, einen Teil des Programms, das weiter oben · ist, anzusehen, er die Aufwärts-Cursor-Taste niederdrücken. Diese Tastenbetätigung wird im Schritt S58 erfaßt, und, im Schritt S62, ändert die Steuereinheit 215 für die verknüpfte Anzeige die Invers-Video-Zeile zu der Programmanzeige durch die Zeilenanzeigeeinheit 209 von Zeile 10 zu Zeile 9. Im Schritt S63 wird die Invers-Video-Zeile beurteilt, ob sie nicht die Programmanzeige überschritten hat, so dass, im Schritt S65, die Steuereinheit 215 für die verknüpfte Anzeige versucht, die Adresse entsprechend zu Zeile 9 von der Zeilenadressen = Speichereinheit 1041 der Fehlersuchinformations-Speichereinheit 104 zu erhalten, allerdings wird, da keine solche Adresse vorhanden ist, keine Invers-Video- Anzeige in der Ausführungscodeanzeige der Zeilenanzeigeeinheit 209 durchgeführt.
- Hierbei wird, wenn es der Benutzer wünscht, einen Teil des Programms, das weiter oben ist, anzusehen, er die Aufwärts-Cursor-Taste niederdrücken. Diese Tastenbetätigung wird im Schritt S58 erfaßt, und im Schritt S62 ändert die Steuereinheit 215 für die verknüpfte Anzeige die Invers-Video-Zeile zu der Programmanzeige durch die Zeilenanzeigeeinheit 209 von Zeile 9 zu Zeile 8. Im Schritt S63 wird die Invers-Video-Zeile dahingehend beurteilt, ob sie nicht die Programmanzeige ausgeführt hat, so dass, im Schritt S65, die Steuereinheit 215 für die verknüpfte Anzeige bestätigt, dass dort eine Adresse, "0x118" entsprechend zu Zeile 9, von der Zeilenadressen-Speichereinheit 1041 vorhanden ist. Die Invers-Video-Anzeige in der Ausführungscodeanzeige wird dann von dem Ausführungscode an der Adresse "0x120" zu dem Code an der Adresse "0x118" geändert. Dies führt zu der Anzeige, die in Fig. 15B dargestellt ist.
- Hierbei wird, wenn es der Benutzer erneut wünscht, einen Teil des Programms, das weiter oben ist, anzusehen, er die Aufwärts-Cursor-Taste niederdrücken. Diese Tastenbetätigung wird im Schritt S58 erfaßt, und im Schritt S62 bewegt die Steuereinheit 215 für die verknüpfte Anzeige die Invers-Video-Anzeige in der Programmanzeige um eine Zeile nach oben. Im Schritt S63 wird beurteilt, ob sich die Invers-Video-Zeile über die Programmanzeige hinaus bewegt hat, und da sich die Invers-Video-Zeile, Zeile 7, über die Anzeigestartzeile hinaus, Zeile 8, befindet, wird dies dahingehend beurteilt, dass es der Fall ist, so dass die Anzeigestartzeile des Programms für die Zeilenanzeigeeinheit 209 zu Zeile 7 geändert wird.
- Nachdem die Anzeigestartlinie geändert ist, prüft die Steuereinheit 215 für die verknüpfte Anzeige, dass eine Adresse "0x108" in der Zeilenadressen-Speichereinheit 1041 der Fehlersuchinformations-Speichereinheit 104 entsprechend zu Zeile 7 gespeichert ist, bevor die Anzeigestartadresse des Ausführungscodes für die Zeilenanzeigeeinheit 209 zu "0x108" geändert wird. Hiernach wird die Invers-Video-Anzeige-Zeile in dem Programm der Zeilenanzeigeeinheit 209 von Zeile 8 zu Zeile 7 geändert, und die Invers-Video- Anzeige in dem Ausführungscode wird von "0x118" zu "0x108" geändert. Als Folge wird die Anzeige durch die Fehlersuchvorrichtung so, wie dies in Fig. 15C dargestellt ist. Mit der vorliegenden Ausführungsform, die vorstehend beschrieben ist, kann die Programmkonversionsvorrichtung eine sehr wirkungsvolle Optimierung eines Programms, geschrieben in einer Sprache auf hohem Niveau, durchführen, während die Aufzeichnung einer solchen Optimierung als Grundstrukturen ausgedrückt wird, die für jede Zeile in dem Quellencode erzeugt sind, so dass die Korrespondenz zwischen Quellencode-Angaben in einer Sprache auf hohem Niveau und jedem Element eines Ausführungscodes deutlich eingerichtet werden kann, wobei die Änderungen in Bezug auf Quellencode-Angaben aufgrund einer Optimierung auch deutlich dargestellt werden. Wenn der Benutzer eine Zeile oder Variable anzeigt, nimmt die Fehlersuchvorrichtung auf die Grundstrukturen, gespeichert in der Grundstruktur-Speichereinheit 102, Bezug, um dem Benutzer ein direktes Feedback zu geben, das sich darauf bezieht, wie die angezeigte Zeile oder Variable durch Optimierung geändert ist, so dass Programmierer eine Operationsverifikation in einer Sprache auf hohem Niveau durchführen können, während sie sich über die Optimierungsverarbeitung bewußt sind.
- Bei dieser Ausführungsform der vorliegenden Erfindung werden Optimierungsprozesse durch die Grundstruktur-Erzeugungseinheit 107 der Programmkonversionsvorrichtung unter Verwendung leicht verständlicher Informationen ausgedrückt als die Ersetzung von Variablen, die Löschung von Variablen, die Resourcen für Variablen und die Bewegung von Zeilen, so dass gerade dann, wenn ein neuer Optimierungsprozess in die Optimierungseinheit 106 eingegeben ist, dieser Optimierungsprozess als eine Kombination der gegebenen Grundstrukturen ausgedrückt werden kann.
- Es ist für die Variable-Operationseinheit 207 möglich, eine Warnnachricht abzugeben, wenn das Operationsobjekt eine Ersetzungsvariable oder eine ersetzte Variable ist. Hierbei kann, wenn die Variable x durch die Variable y ersetzt wird, und es der Benutzer wünscht, eine Operation vorzunehmen, die die Variable y betrifft, die Ausgabeeinheit 208 die Nachricht "auf die Variable y wird durch die Variable x Bezug genommen. Der Wert der Variablen x wird sich auch ändern" ausgeben, so dass keine Änderungen in Bezug auf die Werte von ersetzten Variablen ohne Kenntnis des Benutzers durchgeführt werden.
- Wenn es der Benutzer wünscht, den Wert einer Variablen einzustellen, die das Ergebnis eines Ersetzens ist, kann die Variable-Operationseinheit 207 veranlassen, dass die Ausgabeeinheit 208 eine Nachricht "auf eine Variable wird durch eine andere Variablen Bezug genommen" ausgeben, so dass der Benutzer ein simultanes Ändern des Werts der anderen Variable durch einen Fehler vermeiden kann.
- Wenn die Zeile, für die die Unterbrechungspunkt-Einstelleinheit 203 einen Unterbrechungspunkt einstellt, gelöscht worden ist, kann die Ausgabeeinheit 208 so gestaltet werden, um eine Nachricht "Unterbrechungspunkt kann nicht eingestellt werden, da die Zeile gelöscht worden ist" anzeigen.
- Die Anzeigeeinheit 211 für die operations-mögliche Variable wurde als Markierung von ersetzten Variablen beschrieben, was zeigt, dass Operationen möglich sind, obwohl dies nur für Variable möglich ist, die in dem Stapelspeicher oder den Variablen gespeichert worden sind, der eine Resource zugeordnet worden ist, die markiert werden soll. Die Beurteilungseinheit 202 für die bewegte/gelöschte Variable wurde als Untersuchungsvariable in bewegten oder gelöschten Zeilen und gelöschten Variablen beschrieben, auch durch Verarbeiten von ersetzten Variablen, wobei dem Benutzer eine Warnung gegeben werden kann, wenn er versucht, eine ersetzte Variable in einer anderen Zeile zu verarbeiten.
- Die Zeilenanzeigeeinheit 209 wurde als Anzeigen von bewegten Zeilen nach einer Bewegung, wenn das Programm in der Reihenfolge der optimierten Zeilen angezeigt ist, beschrieben, obwohl durch ein Nichtanzeigen von gelöschten Zeilen das Optimierungsergebnis dargestellt werden kann. Hierbei können ersetzte Variable auch deutlich angezeigt werden.
- In der zweiten Ausführungsform der vorliegenden Erfindung ist ein Aufbau offenbart, bei dem eine einfachere Operation von Variablen möglich ist, gerade wenn Unterausdrücke durch temporäre Variable ersetzt worden sind. Hierbei zeigt Fig. 16 ein Beispiel- Programm, das für eine Grunderzeugung durch die Programmkonversionsvorrichtung der zweiten Ausführungsform verwendet wird:
- Die Kopie-Propagations-Optimierungseinheit 1063 analysiert den Inhalt des Programms der Fig. 16, für das eine Variabel t1 zu einer Variablen x an Zeile 5 substituiert ist und eine Variable x mit dem unmittelbaren Wert "0" an Zeile 6 verglichen wird. Beim Analysieren eines solchen Inhalts sieht die Kopie-Propagations-Optimierungseinheit 1063, dass dann, wenn eine Variable x an Zeile 6 durch die Variable t1 ersetzt ist, die Substitution der Variablen t1 in die Variable x in Zeile 5 gelöscht werden kann. Hiernach wird die Variable x in der Programmzeile "1f(x)" gegen eine Variable t1 ersetzt, so dass Zeile 6 zu "1f(t1)" wird. Nachdem die Kopie-Propagations-Optimierungseinheit 1063 deren Ersetzungsvorgang abgeschlossen hat, analysiert die Optimierungseinheit 1C)61 für den gemeinsamen Unterausdruck Zeile 5 bis Zeile 9, und findet, dass der Unterausdruck "x+3" an der rechten Kante von sowohl Zeile 7 "y=x+3" als auch Zeile 9 "z=x+3" vorhanden ist, so dass die Berechnung "x+3" zweimal ohne eine Änderung zu der Variablen x dazwischen durchgeführt wird. Um die Redundanz zu vermeiden, dass dieser Unterausdruck zweimal durchgeführt wird, wird eine Substitutions-Anzeige "t2=x+3" erzeugt, um diesen Unterausdruck an seiner rechten Kante zu der Variablen t2 zu substituieren, bevor der Unterausdruck "x+3" an der rechten Seite von Zeile 7 und Zeile 9 gegen die temporäre Variable t2 ersetzt wird. Als Folge können zwei Iterationen der Berechnung durch eine Iteration der erzeugten Angabe "t2=x+3" ersetzt werden. Hierbei wird x durch t1 ersetzt, so dass diese erzeugte Angabe zu "t2=t1+3" konvertiert wird. Nach diesem Ersetzen löscht die Optimierungseinheit 1065 für den redundanten Code die Substitutions-Angabe an Zeile 5 "x=t1", die durch die Variable-Ersetzung redundant gemacht worden ist. Das Ergebnis dieser Verarbeitung ist in Fig. 17A dargestellt.
- Die Grundstruktur-Speichereinheit 102 speichert Informationen über die Optimierung, ausgeführt durch die Kopie-Propagations-Optimierungseinheit 1063, wobei deren Inhalt so ist, wie in Fig. 17B dargestellt ist. Wie in dieser Zeichnung dargestellt ist, ist die Variable x an Zeile 6 durch die Variable t1 ersetzt worden, und der Unterausdruck "x+3" an den Zeilen 7 und 9 ist durch die Variable t2 ersetzt worden. Der Ausführungscode, der durch die Codeerzeugungseinheit 110 für das Programm, dargestellt in Fig. 17A, erzeugt ist, ist in Fig. 17D dargestellt, wobei die Zeilenadressen-Korrespondenz-Informationen, erzeugt durch die Zeilenadressen-Informationserzeugungseinheit 111, so sind, wie dies in Fig. 17C dargestellt ist.
- In dieser zweiten Ausführungsform führt die Variable-Operationseinheit 207 Operationen von Variablen entsprechend dem Flußdiagramm, dargestellt in den Fig. 18A und 18B, durch. Das Nachfolgende ist eine Erläuterung der Operation der Variable- Operationseinheit 207 in der zweiten Ausführungsform unter Bezugnahme auf das Flußdiagramm in Fig. 18A. In dem Schritt S71 des Flußdiagramms der Fig. 18A wartet die Variable-Operationseinheit 207 auf eine Anzeige eines Variable-Namens und eines Operations-Typs von der Eingabeeinheit 201.
- Hierbei wird angenommen, dass der Benutzer eine Referenz des Werts der Variablen x an Zeile 7 unter Verwendung der Befehlszeile der Eingabeeinheit 201 anzeigt. Wenn die Eingabeeinheit 201 eine solche Anzeige empfängt, nimmt, im Schritt S72, die Variable- Operationseinheit 207 auf die Grundstrukturen, gespeichert in der Grundstruktur- Speichereinheit 102, Bezug, um zu sehen, was verwendet worden ist, um die Variable, angezeigt durch den Benutzer, über die Eingabeeinheit 201, zu ersetzen. Im Schritt S73 beurteilt die Variable-Operationseinheit 207, ob die angezeigte Variable gegen eine temporäre Variable ersetzt worden ist, und, wenn dies nicht der Fall ist, schreitet die Verarbeitung zu Schritt S81 fort, wo beurteilt wird, ob ein Unterausdruck "a(x)", umfassend die angezeigte Variable x, gegen eine temporäre Variable ersetzt worden ist. In dem vorliegenden Beispiel ist die Variable x in Zeile 7, die durch den Benutzer über die Eingabeeinheit 201 angezeigt ist, in dem Unterausdruck "x+3" vorhanden, der durch die temporäre Variable t2 ersetzt worden ist, so dass die Beurteilung "NEIN" in dem Schritt S73 abgegeben wird, die Beurteilung "JA" in dem Schritt S81 abgegeben wird, und die Verarbeitung schreitet zu Schritt S82 fort. In dem Schritt S82 erhält die Variable-Operationseinheit 207 die temporäre Variable, die verwendet wird, um den Unterausdruck von den Grundstrukturen, gespeichert durch die Grundstruktur-Speichereinheit 102, zu ersetzen. In dem vorliegenden Beispiel wird die temporäre Variable t2 verwendet, um den Unterausdruck "x+3" an Zeile 7 zu ersetzen, so dass diese temporäre Variable t2 im Schritt S82 erhalten wird. Als nächstes beurteilt, im Schritt S83, die Variable-Operationseinheit 207, ob der Typ einer Operation, angezeigt durch den Benutzer über die Eingabeeinheit 201, eine Referenz ist. Falls dies der Fall ist, wird die Resource, die zu der erhaltenen, temporären Variablen zugeordnet ist, im Schritt S84 von der Grundstruktur-Speichereinheit 102 erhalten.
- Unter Bezugnahme auf die Grundstruktur für Zeile 7, dargestellt in Fig. 17B, kann gesehen werden, dass das Datenregister D1 der temporären Variablen t2 zugeordnet worden ist. Wenn einmal eingerichtet ist, dass die zugeordnete Resource das Datenregister D1 ist, nimmt die Variable-Operationseinheit 207 eine Nachfrage an die Code-Ausführungseinheit 206 nach dem gespeicherten Wert der zugeordneten Resource vor. Wenn der Wert jedes Registers in der Hardware-Umgebung, verwendet durch die Code-Ausführungseinheit 206, so ist, wie dies in Fig. 19A dargestellt ist, kann gesehen werden, dass der gespeicherte Wert des Datenregisters D1 "15" ist. Beim Erhalten des Werts der Fehlersuchvorrichtung auf diese Art und Weise wird, im Schritt S86, das Berechnungsergebnis des Unterausdrucks "a(x)", umfasst in der Grundstruktur, als der gespeicherte Wert der Resource eingestellt, und der Wert der Variablen x, der als ein Operand in dem Unterausdruck verwendet wird, wird invers berechnet. In dem vorliegenden Beispiel ist der Wert der temporären Variablen t2 "15" und der Unterausdruck vor einem Ersetzen ist "x+3". Hierbei wird die Beziehung "x+3=t2" in den Grundstrukturen, gespeichert in der Grundstruktur- Speichereinheit 102 eingerichtet, so dass der Wert der Variablen x invers als "12" berechnet wird.
- Beim Erhalten des invers berechneten Ergebnisses hat die Variable-Operationseinheit 207 die Ausgabeeinheit 208 den Wert der Variablen x anzeigen lassen, wie in Fig. 19B dargestellt ist.
- Beim Sehen dieses Werts gibt der Benutzer eine Anzeige für eine Einstelloperation ab, die den Wert der Variablen x auf "20" einstellt. In derselben Art und Weise wie zuvor wird die Beurteilung "NEIN" im Schritt S73 abgegeben, die Beurteilung "JA" wird im Schritt S81 abgegeben und die Verarbeitung schreitet zu Schritt S83 über Schritt S82 fort, wo der Operations-Typ eine Einstelloperation ist, was zu der Beurteilung "NEIN" führt, so dass die Verarbeitung zu Schritt S88 fortschreitet. Im Schritt S88 empfängt die Variable- Operationseinheit 207 den erwünschten Wert "20" von der Eingabeeinheit 201 und substitutiert dies als den Wert der Variablen x in den Unterausdruck "a(x)", den sie dann berechnet. Da die Beziehung "t2=x+3" eingerichtet ist, ist das Berechnungsergebnis des Unterausdrucks a(x) "23", so dass der Wert der temporären Variablen t2 "23" wird. Wenn einmal der Wert dieser temporären Variablen berechnet worden ist, und zwar im Schritt S90 der Resource, wird das Datenregister D1, zugeordnet zu der temporären Variablen, verwendet dazu, um den Unterausdruck a(x) zu ersetzen, von der Grundstruktur- Speichereinheit 102 erhalten, und das Berechnungsergebnis des Unterausdrucks "a(x)" wird in dem Datenregister D1 eingestellt. Indem dies so vorgenommen wird, wird der Wert des Datenregisters D1 auf "23" zurücksetzt, wie in Fig. 19C dargestellt ist.
- Die vorstehende Erläuterung befaßt sich mit der Verarbeitung für den Fall, wenn ein Unterausdruck gegen eine temporäre Variable ersetzt wird, so dass sich die nachfolgende Erläuterung mit dem Fall befasst, wenn eine Variable gegen eine temporäre Variable ersetzt wird. In einem solchen Fall wird die Beurteilung "JA" im Schritt S73 abgegeben, und die Variable-Operationseinheit 207 erhält den Namen der temporären Variablen von den Grundstrukturen, gespeichert in der Grundstruktur-Speichereinheit 102. Hierauf folgend wird die Resource, zugeordnet zu der temporären Variablen, von der Grundstruktur- Speichereinheit 102 im Schritt S74 erhalten.
- Hierbei nimmt, falls der Operations-Typ eine Referenz ist, die Variable-Operationseinheit 207 eine Anfrage über den gespeicherten Wert der Resource, die in Rede steht, zu der Code-Ausführungseinheit 206 vor, bevor die Ausgabeeinheit 208 den gespeicherten Wert dieser Resource anzeigt. Falls andererseits der Operations-Typ ein "Einstellen" ist, empfängt die Variable-Operationseinheit 207 den erwünschten Wert von der Eingabeeinheit 201 und läßt die Code-Ausführungseinheit 206 diesen Wert als den gespeicherten Wert der in Rede stehenden Frage einstellen.
- Mittels der vorliegenden Ausführungsform, die vorstehend beschrieben ist, ist der Benutzer in der Lage, die Referenz und die Einstellung der Variablen, die in dem Programm vorhanden sind, die er geschrieben hat, durchzuführen, gerade wenn die Ausdrücke, die die Variablen umfassen, durch temporäre Variablen bei der Optimierung, durchgeführt durch die Programmkonversionsvorrichtung, ersetzt worden sind.
- Es sollte hier angemerkt werden, dass die vorliegende Erfindung den Fall beschreibt, wenn eine Referenz für eine Variable, umfasst in einem Unterausdruck in dem Programm, das ersetzt ist, unter Verwendung einer temporären Variablen, durchgeführt wird, obwohl es auch möglich für die Variable-Operationseinheit 207 ist, den Wert einer temporären Variablen für einen Wert, eingegeben über die Variable-Operationseinheit 207, zu berechnen und diesen Wert durch die Variable-Operationseinheit eingestellt zu haben, um dadurch dem Benutzer zu ermöglichen, den Wert einer Variablen in dem Programm einzustellen.
- In der vorliegenden Ausführungsform werden, in der Fehlersuchvorrichtung, der Unterausdruck, der die Beziehung zwischen der Variablen in dem Programm und einer temporären Variablen darstellt, und die Informationen, die zeigen, welche Resource dieser temporären Resource zugeordnet worden ist, von der Grundstruktur-Speichereinheit 102 erhalten, wobei der Name der temporären Variablen, umfasst in einem Ausdruck, unter Verwendung der Variablen in dem Programm gefunden wird, und der Resource-Namen dann von dem Namen der temporären Variablen gefunden wird. Allerdings ist es auch möglich, für die Programmausführungsvorrichtung, zuerst die Grundstruktur-Speichereinheit 102 zu suchen und um dann die Beziehung zwischen der Programmvariablen und dem Resource- Namen zu erhalten, und einen Ausdruck zu speichern, der die Beziehung zwischen einer Variablen und einer Resource in der Grundstruktur-Speichereinheit 102 darstellt. Indem dies so vorgenommen wird, ist es möglich, zu wissen, welche Resource einer Variablen nur durch Bezugnahme auf die Ausdrücke, gespeichert in der Grundstruktur- Speichereinheit 102, zugeordnet Ist.
- Obwohl die vorliegende Erfindung vollständig anhand von Beispielen unter Bezugnahme auf die beigefügten Zeichnungen beschrieben worden ist, sollte angemerkt werden, dass verschiedene Änderungen und Modifikationen für Fachleute auf dem betreffenden Fachgebiet ersichtlich werden. Deshalb sollten, ohne dass solche Änderungen und Modifikationen außerhalb des Schutzumfangs der vorliegenden Erfindung liegen, sie dahingehend ausgelegt werden, dass sie darin umfasst sind.
Claims (17)
1. Fehlersuchinformations-Erzeugungsvorrichtung, die das Kompilieren einer
Quellendatei, die aus einer Vielzahl von Quellencode-Anweisungen besteht, überwacht
und Informationen für die Fehlersuche erzeugt, und die umfasst:
eine erste Feststelleinrichtung (106), die für jede Zeile der Quellendatei feststellt,
ob vorgegebene Editiervorgänge an einem Satz Code in der Quellendatei während
der Optimierung interner Ausdrücke, die während des Kompilierens aus der
Quellendatei erzeugt werden, durchgeführt worden sind, und die des Weiteren umfasst:
eine Erzeugungseinrichtung (107), die, wenn festgestellt wird, dass vorgegebene
Editiervorgänge an einem Satz Code durchgeführt worden sind,
Transformationsinformationen erzeugt, die eine Transformation aufgrund des durchgeführten
Editiervorgangs als eine Kombination aus einer Zeilenzahl einer Zeile, die eine
Quellencode-Anweisung enthält, die dem Satz Code entspricht, des
durchgeführten Editiervorgangs und dem Satz Code vor und nach dem Durchführen des
Editiervorgangs ausdrückt;
wobei die erste Feststelleinrichtung enthält:
eine erste Feststelleinheit, die feststellt, ob ein erster Editiervorgang, bei dem eine
Variable in einer Quellencode-Anweisung durch eine andere Variable oder eine
Konstante ersetzt wird, währen der Optimierung vollzogen worden ist;
eine zweite Feststelleinheit, die feststellt, ob ein zweiter Editiervorgang, bei dem
ein Teilausdruck in einer Quellencode-Anweisung durch eine andere Variable oder
eine Konstante ersetzt wird, während der Optimierung vollzogen worden ist;
eine dritte Feststelleinheit, die feststellt, ob ein dritter Editiervorgang, bei dem eine ·
Quellencode-Anweisung auf eine andere Zeile verschoben wird, während der
Optimierung vollzogen worden ist; und
eine vierte Feststelleinheit, die feststellt, ob ein vierter Editiervorgang, bei dem
eine Quellencode-Anweisung gelöscht wird, während der Optimierung vollzogen
worden ist, und
wobei die Erzeugungseinrichtung enthält:
eine erste Erzeugungseinheit, die, wenn festgestellt wird, dass der erste
Editiervorgang vollzogen worden ist, einen Satz Transformationsinformationen vom Typ
1 erzeugt, der eine Zeilenzahl einer Zeile, auf der die entsprechende Quellencode-
Anweisung vorhanden ist, einen Namen der ersetzten Variable für die Variable, die
ersetzt wird, eine ersetzende Konstante oder eine ersetzende Variable nach dem
Ersetzen und Identifizierungsinformationen enthält, die zeigen, dass Ersetzen
vollzogen wird;
eine zweite Erzeugungseinheit, die, wenn festgestellt wird, dass der zweite
Editiervorgang vollzogen worden ist, einen Satz Transformationsinformationen vom Typ
2 erzeugt, der eine Zeilenzahl einer Zeile, auf der die entsprechende Quellencode-
Anweisung vorhanden ist, einen ersetzten Teilausdruck, der ersetzt wird; eine
ersetzende Konstante oder eine ersetzende Variable nach dem Ersetzen und
Identifizierungsinformationen enthält, die zeigen, dass Ersetzen vollzogen wird;
eine dritte Erzeugungseinheit, die, wenn festgestellt wird, dass der dritte
Editiervorgang vollzogen worden ist, einen Satz Transformationsinformationen vom Typ
3 erzeugt, der eine Ursprungszeilenzahl, bei der es sich um eine Zeilenzahl einer
Zeile handelt, auf der die Quellencode-Anweisung, ursprünglich vorhanden war,
eine Ziel-Zeilenzahl, bei der es sich um eine Zeilenzahl einer Zeile handelt, auf die
die Quellencode-Anweisung verschoben worden ist, und
Identifizierungsinformationen enthält, die zeigen, dass Verschieben vollzogen wird; und
eine vierte Erzeugungseinheit, die, wenn festgestellt wird, dass der vierte
Editiervorgang vollzogen worden ist, einen Satz Transformationsinformationen vom Typ
4 erzeugt, der eine Zeilenzahl einer Zeile, auf der die Quellencode-Anweisung
ursprünglich vorhanden war, und Identifizierungsinformationen enthält, die zeigen,
dass Löschen ausgeführt wird.
2. Fehlersuchinformations-Erzeugungsvorrichtung nach Anspruch 1, die des
Weiteren umfasst:
eine erste Erfassungseinrichtung, die, wenn die dritte Erzeugungseinheit einen
Satz Transformationsinformationen vom Typ 3 erzeugt hat, jeden eines Satzes von
der ersten Erzeugungseinheit erzeugter Transformationsinformationen vom Typ 1,
und eines Satzes bis dahin von der zweiten Erzeugungseinheit erzeugter
Transformationsinformationen vom Typ 2, der eine gleiche Zeilenzahl wie die
Ursprungszeilenzahl der Quellencode-Anweisung enthält, die in dem Satz
Transformationsinformationen vom Typ 3 enthalten ist, erfasst; und
eine erste Löscheinrichtung, die die von der ersten Erfassungseinrichtung
erfassten Transformationsinformationen löscht.
3. Fehlersuchinformations-Erzeugungsvorrichtung nach Anspruch 2, die des
Weiteren umfasst:
eine zweite Erfassungseinrichtung, die, wenn ein Satz
Transformationsinformationen vom Typ 4 von der vierten Erzeugungseinheit erzeugt wird, einen Satz
Transformationsinformationen vom Typ 1 oder einen Satz
Transformationsinformationen vom Typ 2 erfasst, der die gleiche Zeilenzahl wie die
Ursprungszeilenzahl der Quellencode-Anweisung enthält, die in dem erfassten Satz von
Transformationsinformationen vom Typ 4 enthalten ist, erfasst; und
eine zweite Löscheinrichtung, die die von der zweiten Erfassungseinrichtung
erfassten Transformationsinformationen löscht.
4. Fehlersuchvorrichtung zum Ausführen von Funktionsprüfung eines
Maschinensprachenprogramms, das durch das Kompilieren einer Quellendatei erzeugt
worden ist, die aus einer Vielzahl von Quellencode-Anweisungen besteht, wobei die
Quellendatei vorgegebenen Editiervorgängen unterzogen wird, nachdem sie
zunächst beim Kompilieren in inneren Ausdruck umgewandelt worden ist, wobei die
Fehlersuchvorrichtung umfasst:
eine Transformationsinformations-Speichereinrichtung (102), die Sätze von
Transformationsinformationen speichert, die jeweils eine Transformation zeigen,
die durch einen der Editiervorgänge bewirkt wurde, wobei jeder der Sätze von
Transformationsinformationen aus einer Zeilenzahl einer Zeile, die eine
Quellencode-Anweisung enthält, die Code entspricht, der einem Editiervorgang
unterzogen wurde, einem Editienrorgangs-Inhalt und einer Paarung von Codes vor und
nach dem Ausführen des Editiervorgangs besteht;
eine Befehls-Empfangseinrichtung (201, 501), die einen Fehlersuchbefehl
empfängt, bei dem es sich um einen Befehl zum Prüfen der Funktion des
Maschinensprachenprogramms handelt, das durch das Kompilieren erzeugt wurde;
eine Analysiereinrichtung (202, 204), die einen Inhalt des Fehlersuchbefehls
interpretiert, und, wenn der Fehlersuchbefehl eine Anzeige für einen Satz Code vor
dem Durchführen eines Editiervorgangs enthält, Details einer Transformation des
Satzes Code aufgrund des Durchführens des Editiervorgangs auf der Grundlage
aller Transformationsinformationen analysiert, die den Satz Code enthalten;
eine erste Bildanzeigeeinrichtung (202, 208, 209, 210, 211, 212, 214), die die
Einzelheiten der von der Analysiereinrichtung analysierten Transformation anzeigt;
und
eine Funktions-Prüfeinrichtung (206, 207), die sich auf die Details der
Transformation bezieht, die von der Analysiereinrichtung analysiert wurde, und Sätze von
Ausführungscode aus allen Sätzen von Ausführungs--Code in dem
Maschinensprachenprogramm erfasst, die sich auf den Fehlersuchbefehl beziehen, und
Funktionsprüfung vollzieht.
5. Fehlersuchvorrichtung nach Anspruch 4, wobei die Transformationsinformations-
Speichereinrichtung Sätze von Transformationsinformationen von Typ 1 bis Typ 4
speichert, die von der ersten bis vierten Erzeugungseinheit der
Fehlersuchinformations-Erzeugungsvorrichtung nach Anspruch 1 erzeugt werden; und
eine Zuordnungsinformations-Speichereinrichtung, die Sätze von
Zuordnungsinformationen speichert, die jeweils aus Paarungen einer Zeilenzahl einer Zeile, auf
der eine Quellencode-Anweisung vorhanden ist, und einer Variablennamen-
Resourcennamen-Beziehung bestehen, die ausdrückt, welche Hardware-
Resource welcher Variable in welcher Quellencode-Anweisung zugeordnet worden
ist, wobei die Analysiereinrichtung enthält:
eine erste Interpretiereinheit, die eine Anzeige eines Variablennamens
interpretiert, der in dem Fehlersuchbefehl enthalten ist, dessen gespeicherter Wert zu
lesen ist;
eine erste Erfassungseinheit, die die von der ersten Interpretiereinheit
interpretierte Variable erfasst, wenn die Variable durch einen Satz
Transformationsinformationen vom Typ 1 oder einen Satz Transformationsinformationen vom Typ 2,
der von der Transformationsinformations-Speichereinrichtung gespeichert wird, als
eine ersetzte Variable oder eine ersetzende Variable angezeigt wird;
eine zweite Erfassungseinheit, die jeden in der
Zuordnungsinformations-Speichereinheit gespeicherten Satz Zuordnungsinformationen erfasst, der eine ersetzende
Variable enthält, die in dem durch die erste Erfassungseinheit erfassten Satz
Transformationsinformationen enthalten ist;
eine Kombiniereinheit, die einen neuen Satz Zuordnungsinformationen, der aus
einer ersetzen Variable und einer ersetzenden Variable in dem durch die erste
Erfassungseinheit erfassten Satz von Transformationsinformationen besteht und
einen Resourcennamen in dem durch die zweite Erfassungseinheit erfassten Satz
von Zuordnungsinformationen kombiniert; und
eine Leseeinheit, die, wenn er in einem Lesekommando enthalten ist, einen durch
den Resourcennamen angezeigten Wert einer Hardware-Resource liest, der in
dem neuen Satz Zuordnungsinformationen enthalten ist,
und wobei die erste Anzeigeeinrichtung eine erste Anzeigeeinheit enthält, die,
wenn ein Lesevorgang einer Hardware-Resource ausgeführt worden ist, eine
Meldung anzeigt, dass die ersetzte Variable durch die ersetzende Variable ersetzt
worden ist, und dass sowohl die ersetzte Variable als auch die ersetzende
Variable den aus der Hardware-Resource gelesenen Wert haben.
6. Fehlersuchvorrichtung nach Anspruch 5, die des Weiteren umfasst:
eine zweite interpretiereinheit, die einen Variablennamen einer Variablen
interpretiert, in die ein gewünschter Wert zu schreiben ist, wobei der Variablenname in
dem Fehlersuchbefehl enthalten ist,
wobei die erste Erfassungseinheit erfasst, ob der Variablenname, der von dem
Benutzer angezeigt wird, durch einen Satz Transformationsinformationen vom Typ
1 und einen Satz Transformationsinformationen vom Typ 2 als eine ersetzte
Variable oder eine ersetzende Variable angezeigt wird,
wobei die zweite Erfassungseinrichtung erfasst, ob ein Satz
Zuordnungsinformationen eine ersetzende Variable enthält, die in dem von der ersten
Erfassungseinheit erfassten Satz Transformationsinformationen enthalten ist,
wobei die Kombiniereinheit den Resourcennamen, den Namen der ersetzten
Variable und den Namen der ersetzten Variable, der in dem von der ersten
Erfassungseinheit erfassten Satz Transformationsinformationen und in dem vom der
zweiten Erfassungseinheit erfassten Satz Zuordnungsinformationen enthalten ist,
zu einem neuen Satz Zuordnungsinformationen kombiniert; und
eine Schreibeinheit, die, wenn vom Benutzer eine Schreibanzeige ergeht, den
gewünschten Wert in die Hardware Resource schreibt deren
Hardware-Resourcenname in dem neuen Satz von Zuordnungsinformationen enthalten,
und wobei die erste Bildanzeigeeinrichtung eine zweite Bildanzeigeeinheit enthält,
die, wenn ein Schreibvorgang für eine Hardware-Resource ausgeführt wird, eine
Mitteilung anzeigt, die zeigt, dass die ersetzte Variable durch die ersetzende
Variable ersetzt worden ist, sowie eine Meldung, die zeigt, dass sowohl die ersetzte
Variable als auch die ersetzende Variable auf den gewünschten Wert eingestellt
worden sind.
7. Fehlersuchvorrichtung nach Anspruch 6, die des Weiteren umfasst:
eine Zeilenadresseninformations-Speichereinrichtung, die Sätze von
Zeilenadresseninformationen speichert, die ausdrücken, wie eine Quellencode-Anweisung auf
jeder Zeile in Ausführungs-Code umgewandelt worden ist, wobei jeder Satz von
Zeilenadresseninformationen aus einer Zeilenzahl einer Zeile, auf der sich eine
Quellencode-Anweisung befindet, und einer Adresse von Ausführungs-Code
besteht, der der Quellencode-Anweisung entspricht, und
eine dritte Interpretiereinheit, die eine Zeilenzahl einer Quellencode-Anweisung
interpretiert, die eine zu lesende Variable enthält,
wobei die Funktionsprüfeinrichtung enthält:
eine erste Abrufeinheit, die eine Adresse von Ausführungs-Code abruft, die der
durch die dritte Interpretiereinheit interpretierten Zeilenzahl entspricht;
eine zweite Abrufeinheit, die einen Resourcennamen einer Resource abruft, die
durch einen neuen Satz von Zuordnungsinformationen angezeigt wird, der von der
Kombiniereinheit kombiniert worden ist und der die Zeilenzahl enthält, die der
abgerufenen Adresse entspricht;
eine erste Adressen-Bestimmungseinheit, die die abgerufene Adresse als eine
Adresse zum Setzen eines Unterbrechungspunktes bestimmt; und
eine Ausführeinheit, die das Maschinensprachenprogramm bis zu der bestimmten
Adresse zum Setzen eines Unterbrechungspunktes ausführt,
wobei die Leseinheit und die Schreibeinheit ein Lesen bzw. ein Schreiben einer
Hardware-Resource vollziehen, die durch den abgerufenen Resourcennamen
angezeigt wird, nachdem das Maschinensprachenprogramm durch die
Ausführeinheit ausgeführt worden ist.
8. Fehlersuchvorrichtung nach Anspruch 7, die des Weiteren umfasst:
eine fünfte Feststelleinheit, die, wenn eine Anzeige einer Variablen, deren Wert zu
lesen ist, oder eine Anzeige einer Variablen, in die ein gewünschter Wert zu
schreiben ist, von der ersten Interpretiereinheit oder der zweiten Interpretiereinheit
interpretiert worden ist, sich auf die Sätze von Transformationsinformationen vom
Typ 3 bezieht und feststellt, ob eine Quellencode-Anweisung, die die Variable
enthält, verschoben worden ist; und
eine sechste Feststelleinheit, die, wenn eine Anzeige einer Variablen, deren Wert
zu lesen ist, oder eine Anzeige einer Variablen, in die ein gewünschter Wert zu
schreiben ist, von der ersten Interpretiereinheit oder der zweiten interpretiereinheit
interpretiert worden ist, sich auf die Sätze von Transformationsinformationen vom
Typ 4 bezieht und feststellt, ob eine Quellencode-Anweisung, die die Variable
enthält, gelöscht worden ist,
und wobei die erste Bildanzeigeeinrichtung enthält:
eine erste Warneinheit, die einen Benutzer, wenn die fünfte Feststelleinheit
feststellt, dass die Quellencode-Anweisung verschoben worden ist, dahingehend
warnt, dass das angezeigte Lesen und Schreiben nicht ausgeführt werden kann,
da die Quellencode-Anweisung von einer ursprünglichen Zeile verschoben worden
ist;
eine zweite Warneinheit die einen Benutzer, wenn die sechste Feststelleinheit
feststellt, dass die Quellencode-Anweisung gelöscht worden ist, dahingehend
warnt, dass das angezeigte Lesen und Schreiben nicht ausgeführt werden kann,
da die Quellencode-Anweisung von einer ursprünglichen Zeile verschoben worden
ist; und
eine dritte Warneinheit, die einen Benutzer, wenn die Quellencode-Anweisung
weder verschoben noch gelöscht worden ist, jedoch kein Satz
Zuordnungsinformationen vorhanden ist, der einen Variablennamen der ersetzenden Variable enthält,
der in dem von der zweiten Erfassungseinrichtung erfassten Satz
Transformationsinformationen enthalten ist, dahingehend warnt, dass das Lesen und Schreiben
der angezeigten Variable nicht ausgeführt werden kann.
9. Fehlersuchvorrichtung nach Anspruch 8, wobei die Analysiereinrichtung des
Weiteren enthält:
eine vierte Interpretiereinheit, die eine Anzeige für eine Ausführung des
Maschinensprachenprogramms, die in einem Fehlersuchbefehl enthalten ist, und eine
Anzeige einer Zeile interpretiert, auf der ein Unterbrechungspunkt zu setzen ist;
und
eine siebte Feststelleinheit, die sich auf Sätze von Transformationsinformationen
vom Typ 3 und Typ 4 bezieht und feststellt, ob eine Quellencode-Anweisung auf
einer angezeigten Zeile auf eine andere Zeile verschoben worden ist oder ob die
Quellencode-Anweisung sich noch auf einer ursprünglichen Zeile befindet,
wobei die erste Bildanzeigeeinrichtung eine Mitteilungseinheit enthält die dem
Benutzer, wenn die siebte Feststelleinheit feststellt, dass die Quellencode-
Anweisung verschoben worden ist, die Zahl der Verschiebungs-Zielzeile und eine
Meldung mitteilt, die anzeigt, dass ein Unterbrechungspunkt auf der
Ursprungszeilenzahl festgelegt worden ist,
wobei die Funktionsprüfeinrichtung enthält:
eine erste Adressen-Bestimmungseinheit, die, wenn festgestellt wird, dass eine
Quellencode-Anweisung sich auf der Ursprungszeilenzahl befindet, oder festgestellt
wird, dass sie gelöscht worden ist, eine Adresse zum Setzen eines
Unterbrechungspunktes auf der Grundlage einer Entsprechungsbeziehung zwischen der
Quellencode-Anweisung und dem Ausführungs-Code bestimmt, die in der
Zeilenadresseninformations-Speichereinrichtung gespeichert ist; und
eine zweite Adressen-Bestimmungseinheit, die, wenn festgestellt wird, dass eine
Quellencode-Anweisung verschoben worden ist, eine Unterbrechungspunkt-
Einstelladresse auf der Grundlage einer Entsprechungsbeziehung zwischen der
Quellencode-Anweisung und dem Ausführungs-Code bestimmt, die in der
Zeilenadresseninformations-Speichereinrichtung gespeichert ist,
und wobei die Ausführeinheit das Maschinensprachenprogramm bis zu der
bestimmten Adressen zum Setzen eines Unterbrechungspunktes ausführt.
10. Fehlersuchvorrichtung nach Anspruch 5, die des Weiteren enthält:
eine Vorgangsanzeige-Empfangseinrichtung, die eine Anzeige von einem
Benutzer für einen Vorgang in einer Quellendatei empfängt, dessen Funktion zu prüfen
ist;
eine zweite Bildanzeigeeinrichtung, die einen Teil der in dem angezeigten Vorgang
enthaltenen Quellencode-Anweisungen extrahiert und die extrahierten
Quellencode-Anweisungen in einem vorgegebenen ersten Fenster anzeigt; und
eine dritte Bildanzeigeeinrichtung, die Ausführungs-Code, der den in dem
vorgegebenen ersten Fenster angezeigten Quellencode-Anweisungen entspricht, von
dem gesamten in dem Maschinensprachenprogramm enthaltenen Ausführungs-
Code, in einem zweiten Fenster anzeigt, das in einer vorgegebenen Richtung in
Bezug auf die angezeigten Quellencode-Anweisungen angeordnet ist,
wobei die Befehls-Empfangseinrichtung des Weiteren enthält:
eine erste Hervorhebeeinrichtung die wenn die Befehls-Empfangseinrichtung
einen Fehlersuchbefehl empfängt, der eine Zeile anzeigt, bei der ein Unterbrechungspunkt
gesetzt werden soll, eine Bildanzeige einer Quellencode-Anweisung
auf einer entsprechenden Zeile hervorhebt, die in dem von der zweiten
Anzeigeeinrichtung angezeigten ersten Fenster angezeigt wird;
eine zweite Feststelleinrichtung, die, wenn eine Quellencode-Anweisung mit der
ersten Hervorhebeeinrichtung hervorgehoben wird, eine Adresse von
Ausführungs-Code feststellt, der der hervorgehobenen Quellencode-Anweisung
entspricht; und
eine zweite Hervorhebeeinrichtung, die eine Bildanzeige von Ausführungs-Code
an der von der zweiten Feststelleinrichtung festgestellten Adresse in dem von der
dritten Bildanzeigeeinrichtung angezeigten zweiten Fenster hervorhebt.
11. Fehlersuchvorrichtung nach Anspruch 10, die des Weiteren umfasst:
eine dritte Erfassungseinrichtung, die, wenn eine Benutzeranzeige eines
Vorgangs, dessen Funktion zu prüfen ist, von der
Vorgangsanzeige-Empfangseinrichtung empfangen worden ist, in dem angezeigten Vorgang enthaltenen
Quellencode-Anweisungen, die in einem Satz Transformationsinformationen vom
Typ 3 angezeigt werden, als verschobene Quellencode-Anweisung erfasst;
eine vierte Erfassungseinrichtung, die, wenn eine Benutzeranzeige eines
Vorgangs, dessen Funktion zu prüfen ist, von der
Vorgangsanzeige-Empfangseinrichtung empfangen worden ist, alle in der angezeigten Funktion enthaltenen
Quellencode-Anweisungen, die in einem Satz Transformationsinformationen vom
Typ 4 angezeigt werden, als gelöschte Quellencode-Anweisung erfasst;
eine erste Etiketten-Anbringungseinrichtung, die jede Zeile, die eine von der dritten
Erfassungseinrichtung erfasste Quellencode-Anweisung aufweist, mit einem
Etikett anzeigt, das zeigt, dass die Quellencode-Anweisung der Zeile verschoben
worden ist; und
eine zweite Etiketten-Anbringungseinrichtung, die jede Zeile, die eine von der
vierte Erfassungseinrichtung erfasste Quellencode-Anweisung aufweist, mit einem
Etikett anzeigt, das zeigt, dass die Quellencode-Anweisung der Zeile gelöscht
worden ist.
12. Fehlersuchvorrichtung nach Anspruch 11, die des Weiteren umfasst:
eine fünfte Erfassungseinrichtung, die alle Variablen erfasst, die in dem durch die
Vorgangsanzeigeeinrichtung angezeigten Vorgang enthalten sind;
eine sechste Erfassungseinrichtung, die einen Satz Transformationsinformationen
vom Typ 1 und einen Satz Zuordnungsinformationen erfasst, die eine von der
fünften Erfassungseinrichtung erfasste Variable enthalten; und
eine Anordnungseinrichtung, die einen Hardware-Resourcennamen, der in einem
Satz Zuordnungsinformationen enthalten ist, eine ersetzte Variable und eine
ersetzende Variable, die von der sechsten Erfassungseinrichtung erfasst worden sind,
und eine Mitteilung, die zeigt, dass Ersetzen vollzogen worden ist, in einer
vorgegebenen Richtung in Bezug auf eine Quellencode Anweisung angeordnet anzeigt,
die die Variablen enthält.
13. Fehlersuchvorrichtung nach Anspruch 12, die des Weiteren umfasst:
eine dritte Feststelleinrichtung, die sich auf Sätze von Zuordnungsinformationen
bezieht, die jede Variable in den Quellencode-Anweisungen enthalten, und
feststellt, ob Lesen und Schreiben für jede Resource möglich sind, die jeder der
Variablen entspricht; und
eine Zeichen-Positioniereinrichtung, die Zeichen auf einer Bildanzeigeeinrichtung
positioniert, um zu zeigen, dass Lesen und Schreiben für jede Quellencode-
Anweisung möglich sind, die eine Variable enthält, für die Lesen und Schreiben als
möglich festgestellt wird.
14. Fehlersuchvorrichtung nach Anspruch 5, die des Weiteren umfasst:
eine Zähleinheit, die eine Gesamtmenge von in der Transformationsinformations-
Speichereinrichtung und der Zuordnungsinformations-Speichereinrichtung
gespeicherten Informationen zählt; und
eine Steuereinrichtung, die, wenn die Gesamtmenge von Informationen einem
vorgegebenen Schwellenwert entspricht oder darunter liegt, die
Kombiniereinrichtung so steuert, dass sie einen Satz Transformationsinformationen vom Typ 1 und
einen Satz Zuordnungsinformationen zu einem neuen Satz
Zuordnungsinformationen kombiniert, der aus einem Resourcennamen, der in dem Satz
Zuordnungsinformationen enthalten ist, und der ersetzten Variable sowie der ersetzenden
Variable besteht, die in dem Satz Transformationsinformationen vom Typ 1 enthalten
sind.
15. Fehlersuchvorrichtung nach Anspruch 5, die des Weiteren umfasst:
eine Zähleinheit, die eine Gesamtzahl von Zeilen von Quellencode-Anweisungen
zählt, die in der Transformationsinformations-Speichereinrichtung und der
Zuordnungsinformations-Speichereinrichtung gespeichert sind; und
eine Steuereinrichtung, die, wenn die Gesamtzahl von Zeilen einem vorgegebenen
Schwellenwert entspricht oder darunter liegt, die Kombiniereinrichtung so steuert,
dass sie einen Satz Transformationsinformationen vom Typ 1 und einen Satz
Zuordnungsinformationen zu einem neuen Satz Zuordnungsinformationen
kombiniert, der aus einem Resourcennamen, der in dem Satz Zuordnungsinformationen
enthalten ist, und der ersetzen Variable sowie der ersetzenden Variable besteht,
die in dem Satz Transformationsinformationen vom Typ 1 enthalten sind.
16. Fehlersuchvorrichtung nach Anspruch 5, die des Weiteren umfasst:
eine Zähleinheit, die eine Code-Größe des Ausführungs-Codes zählt; und
eine Steuereinrichtung, die, wenn die gezählte Code-Größe einem vorgegebenen
Schwellenwert entspricht oder darunter liegt, die Kombiniereinrichtung so steuert,
dass sie einen Satz Transformationsinformationen vom Typ 1 und einen Satz
Zuordnungsinformationen zu einem neuen Satz Zuordnungsinformationen
kombiniert, der aus einem Resourcennamen, der in dem Satz Zuordnungsinformationen
enthalten ist, und der ersetzten Variable sowie der ersetzenden Variable besteht,
die in dem Satz Transformationsinformationen vom Typ 1 enthalten sind.
17. Programmentwicklungssystem, das umfasst:
eine Fehlersuchinformations-Erzeugungsvorrichtung nach einem der Ansprüche 1
bis 3, sowie eine Fehlersuchvorrichtung nach einem der Ansprüche 4 bis 16.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP8169195A JPH1021086A (ja) | 1996-06-28 | 1996-06-28 | プログラム変換装置とデバッグ装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69712986D1 DE69712986D1 (de) | 2002-07-11 |
DE69712986T2 true DE69712986T2 (de) | 2002-10-17 |
Family
ID=15881985
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69712986T Expired - Fee Related DE69712986T2 (de) | 1996-06-28 | 1997-03-27 | Programmentwicklungssystem |
Country Status (6)
Country | Link |
---|---|
EP (1) | EP0817049B1 (de) |
JP (1) | JPH1021086A (de) |
KR (1) | KR100417655B1 (de) |
CN (1) | CN1143225C (de) |
DE (1) | DE69712986T2 (de) |
TW (1) | TW366451B (de) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6269454B1 (en) * | 1998-11-06 | 2001-07-31 | Advanced Micro Devices, Inc. | Maintaining object information concurrent with data optimization for debugging |
JP3612294B2 (ja) | 2001-08-06 | 2005-01-19 | 松下電器産業株式会社 | デバッグ方法およびデバッグ装置 |
US8239832B2 (en) | 2007-05-25 | 2012-08-07 | Microsoft Corporation | In-process debugging using external debugging infrastructure |
JP2015194881A (ja) | 2014-03-31 | 2015-11-05 | 富士通株式会社 | コンパイル装置、コンパイラプログラム、コンパイル方法 |
CN109643091B (zh) * | 2016-08-24 | 2020-07-14 | 三菱电机株式会社 | 可编程逻辑控制器 |
US11512993B2 (en) | 2017-09-25 | 2022-11-29 | Fujikin Incorporated | Valve device, adjustment information generating method, flow rate adjusting method, fluid control system, flow rate control method, semiconductor manufacturing system and semiconductor manufacturing method |
CN109240743B (zh) * | 2018-08-03 | 2021-07-27 | 挖财网络技术有限公司 | 一种利用特定标签来进行代码切换的方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4667290A (en) * | 1984-09-10 | 1987-05-19 | 501 Philon, Inc. | Compilers using a universal intermediate language |
US4953084A (en) * | 1987-11-16 | 1990-08-28 | Hewlett-Packard Company | Method and apparatus using variable ranges to support symbolic debugging of optimized code |
JPH03240837A (ja) * | 1990-02-19 | 1991-10-28 | Nec Corp | デバッグ情報生成装置 |
US5371747A (en) * | 1992-06-05 | 1994-12-06 | Convex Computer Corporation | Debugger program which includes correlation of computer program source code with optimized object code |
AU4598593A (en) * | 1992-06-05 | 1994-01-04 | Convex Computer Corporation | Computer program debugging in the presence of compiler synthesized variables |
JPH06274369A (ja) * | 1993-03-19 | 1994-09-30 | Hitachi Ltd | 最適化プログラムのデバッグ方式 |
-
1996
- 1996-06-28 JP JP8169195A patent/JPH1021086A/ja not_active Withdrawn
-
1997
- 1997-03-27 TW TW086103957A patent/TW366451B/zh active
- 1997-03-27 DE DE69712986T patent/DE69712986T2/de not_active Expired - Fee Related
- 1997-03-27 EP EP97302199A patent/EP0817049B1/de not_active Expired - Lifetime
- 1997-03-28 KR KR1019970011066A patent/KR100417655B1/ko not_active IP Right Cessation
- 1997-03-28 CN CNB971132046A patent/CN1143225C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1143225C (zh) | 2004-03-24 |
KR100417655B1 (ko) | 2004-06-09 |
EP0817049B1 (de) | 2002-06-05 |
JPH1021086A (ja) | 1998-01-23 |
EP0817049A1 (de) | 1998-01-07 |
DE69712986D1 (de) | 2002-07-11 |
TW366451B (en) | 1999-08-11 |
CN1172304A (zh) | 1998-02-04 |
KR980004050A (ko) | 1998-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69720821T2 (de) | Fehlersuchsystem für Programme mit einer graphischen Benutzerschnittstelle | |
DE69021659T2 (de) | Verfahren und Vorrichtung zur reihenweisen Parallelprogrammfehlersuche. | |
DE69316210T2 (de) | Fehlerbeseitiger, der die zuordnung zwischen dem quellprogramm und optimierten objektcode beinhaltet. | |
DE69525706T2 (de) | Vorrichtung und Verfahren zum Generieren des Zielsprachcodes durch Verwendung eines objektorientierten Codegenerators | |
DE69221041T2 (de) | Verbesserte fehleranzeige bei der ausführung von übersetztem befehlscode | |
DE69033360T2 (de) | Simulation von ausgewählten Logik-Schaltungsentwürfen | |
DE69232761T2 (de) | Verfahren und vorrichtung zur aenderung von dynamische zuweisbaren objektcodedateien | |
DE69216020T2 (de) | Verbessertes fehlersuchsystem und -verfahren, besonders für die fehlersuche in einer multi-architekturumgebung | |
DE69909945T2 (de) | Verfahren und Anordnung zur Korrelation von Profildaten dynamisch erzeugt durch ein optimiertes ausführbares Programm mit Quellcodeanweisungen | |
DE3854546T2 (de) | Verfahren und Gerät zur Programmablaufmessung. | |
DE69516891T2 (de) | Verfahren zum übersetzen von quellkode aus einer computer-hochsprache in eine andere | |
DE60001916T2 (de) | Plattformunabhängige speicherabbild analysearchitektur zur programmfehlerbeseitigung | |
DE69518123T2 (de) | Visualisierung von objektorientierter Software | |
DE69524930T2 (de) | Vorrichtung zur visuellen Darstellung von Programmscheiben | |
DE68929038T2 (de) | Verfahren zur Verarbeitung von digitalen Textdaten | |
DE69510801T2 (de) | Verfahren und vorrichtung zur modellierung von rechnerprozessbetriebsmitteln | |
DE69229319T2 (de) | System und Verfahren zur Konservierung der Unteilbarkeit eines Quellbefehls in übertragenen Programmbefehlen | |
DE69226347T2 (de) | Methode zum Erzeugen und Ausführen von komplexen Verfahren | |
DE69426281T2 (de) | Verfahren zur dynamischen Beibehaltung mehrfacher struktureller Interpretationen in einem Grafiksystem | |
DE69620057T2 (de) | Optimierer | |
DE69622161T2 (de) | Rechnersystem mit Kontextumschaltung und Programmentwicklung dafür | |
DE69816381T2 (de) | Vorrichtung zur Unterstützung von Fehlersuche in symbolische Programme und entsprechender Kompiler. | |
DE69705654T2 (de) | Optimierungsverfahren unter Verwendung von globaler Analyse zur Eliminierung redundanter Transferbefehle | |
DE102006019292A1 (de) | Modellieren programmierbarer Einrichtungen | |
DE69026208T2 (de) | Verfahren zur Erkennung möglicher Fehler einer Programmierung in Assembler Sprache mit Erfassung offensichtlicher Inkonsistenz mit einer vorhergehenden Operation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8339 | Ceased/non-payment of the annual fee |