In diesem Abschnitt sind die grundlegenden Schritte beim Debug eines Programms im EGL-Debugger beschrieben.
Die Strategien für das Anwendungsdebugging sind zu umfangreich für die vorliegende Dokumentation. Generell dient der Debuggingprozess jedoch dazu, die Quelle eines Problems im Code zu ermitteln. Falls Ihr Programm beispielsweise abnormal beendet wird, können Sie den Code mit dem Debugger schrittweise durchgehen und den Punkt ermitteln, an dem das Programm fehlschlägt. Falls das Programm eine nicht erwartete Ausgabe zurückgibt, können Sie mit dem Debugger die Werte von Variablen überwachen und den Punkt ermitteln, an dem die Ausgabe von den Erwartungen abweicht.
Der Debugger beginnt das Debugging immer bei einem Programmabschnitt. Falls Sie das Debug für einen anderen Logikabschnitt (z. B. eine Bibliothek) ausführen wollen, müssen Sie aus einem Programm eine Step-Into-Aktion für den anderen Logikabschnitt ausführen. In manchen Fällen kann es sinnvoll sein, ein einfaches Programm zu schreiben, dessen einzige Funktion im Aufruf des Logikabschnitts besteht, dessen Debug ausgeführt werden soll.
program myDebugTestPgm type BasicProgram
function main()
//Provide some initial values for the array of items.
customerItems items[3];
customerItems[1].itemNumber=1;
customerItems[2].itemNumber=2;
customerItems[3].itemNumber=3;
customerItems[1].itemCost=12.50;
customerItems[2].itemCost=200;
customerItems[3].itemCost=49.95;
customerItems[1].itemQuantity=30;
customerItems[2].itemQuantity=10;
customerItems[3].itemQuantity=60;
counter int;
orderTotal float=0;
//Calculate the total cost of the items.
//Use the discountPrice function to get the discounted cost of each item.
for (counter from 1 to customerItems.getSize() by 1)
orderTotal += discountPrice(customerItems[counter].itemCost,
customerItems[counter].itemQuantity);
end // for loop
//Write the output to the console.
SysLib.writeStderr("The total cost for the order is $" + orderTotal);
end // main
//Return a total price for a group of items
//based on the item price and a quantity discount.
function discountPrice(itemCost float in, itemQuantity int in) returns(float)
discountRate float=0;
quantCost float=0;
//Determine the discount for each quantity.
//Discount 20% for more than 50 items.
//Discount 5% for more than 20 items.
case
when (itemQuantity > 50)
discountRate = 1/5;
when (itemQuantity > 20 && itemQuantity <= 50)
discountRate = 1/20;
otherwise
//bug - division by zero
discountRate = 1/0;
end
//Multiply the cost of the item, the number of items,
//and the discounted price.
quantCost = itemCost*itemQuantity*(1-discountRate);
quantCost = MathLib.round(quantCost, -2);
return (quantCost);
end // function discountPrice
end // program
record items type BasicRecord
itemNumber int;
itemCost float;
itemQuantity int;
end
Wenn Sie dieses Programm generieren und ausführen, gibt EGL einen Fehler zurück, der auf die
Funktion discountPrice und den Ausdruck 1/0 verweist. In diesem Fall ist der Fehler leicht erkennbar. Es kann jedoch auch Situationen geben, in denen der Fehler nicht so einfach ermittelt werden kann. Zur Ermittlung der Fehlerquelle müssen Sie zunächst das Programm mit Unterbrechungspunkten im Debugger ausführen, um den Punkt zu ermitteln, an dem das Programm fehlschlägt.Sie können eine oder mehrere Codezeilen als Unterbrechungspunkte markieren. Sobald der Debugger einen Unterbrechungspunkt findet, wird er vor der Ausführung der zugehörigen Codezeile angehalten. Sie haben dann die Möglichkeit, die aktuellen Werte von Programmvariablen zu prüfen, bevor Sie den Debugger anweisen, wie er fortfahren soll. Unterbrechungspunkte wirken sich in keiner Hinsicht auf die Quelle aus und sind nur während des Debuggingprozesses von Bedeutung.
Um einen Unterbrechungspunkt hinzuzufügen, doppelklicken Sie im EGL-Editor auf den grauen Rand links neben dem Code. Im obigen Beispiel könnte es sinnvoll sein, Unterbrechungspunkte in der Funktion discountPrice hinzuzufügen, weil in der Fehlernachricht angegeben ist, dass der Fehler in dieser Funktion auftrat. Unterbrechungspunkte werden durch blaue Kreise in diesem grauen Bereich gekennzeichnet:

myString = "Hello";
myInt int = 5;
SysLib.writeStderr("Hello");
if (myInt == 5)
Weitere Anweisungen für die Verwendung von Unterbrechungspunkten finden Sie unter Unterbrechungspunkte im EGL-Debugger verwenden.
Sie können das Debug für ein Programm auch ohne Unterbrechungspunkte ausführen. Falls Sie die Vorgabe auswählen, hat dies denselben Effekt wie die Festlegung eines Unterbrechungspunkts bei der ersten ausführbaren Zeile innerhalb der Funktion main() des Programms. Von diesem Punkt aus können Sie die nachfolgenden Codezeilen schrittweise durchgehen, also eine einzelne Zeile ausführen und dann die Ausführung anhalten. Weitere Informationen zu den Step-Befehlen enthält der Abschnitt Steuerelemente für den EGL-Debugger.
Nachdem Sie Unterbrechungspunkte zu Ihrem Programm hinzugefügt oder die Option für das Stoppen bei der ersten Zeile festgelegt haben (siehe hierzu den obigen Abschnitt 'Unterbrechungspunkte hinzufügen'), können Sie das Programm im Debugger ausführen.
Im Beispielprogramm können Sie das Programm von Unterbrechungspunkt zu Unterbrechungspunkt ausführen, bis der Debugger die Zeile discountRate = 1/0; erreicht hat. An diesem Punkt gibt der Debugger denselben Fehler zurück, der bei der Ausführung des Programms auch in der Konsole angezeigt wird.