Wertfreie Variable
Wenn Sie jetzt die Variablen »i« und »val« untersuchen, sehen Sie, dass »val« zwar der richtigen Summe entspricht (also 200 Cent), dass aber »i« gleich null ist. Weil das nur am Ende der gesamte Schleife passieren sollte und der Wert von »i« innerhalb der Schleife immer größer als null sein müsste - da die Endbedingung in Zeile 16 »i>0« lautet -, liegt die Vermutung nahe, dass das Programm diese Schleife bereits verlassen hat. Eine nähere Untersuchung der »if«-Abfrage zeigt, dass die geschweiften Klammern um die Zeilen 18 bis 20 fehlen. Der Compiler interpretiert sie also nicht wie gewünscht; das verursacht den Speicherzugriffsfehler.
Wie zuvor kompilieren und starten Sie das Programm neu. Dieses Mal gibt es überhaupt keine Ausgabe und daher leider ebensowenig einen verwertbaren Call Stack, der weitere Hinweise liefern könnte. Das gibt Grund zu der Annahme, dass das Programm in einer Schleife hängt. Da es insgesamt nur zwei Schleifen verwendet, sollte der Bug leicht aufzuspüren sein. Mit einem Breakpoint in der äußeren Schleife (Zeilen 14 bis 22) stellen Sie fest, ob sie korrekt iteriert. Kommt das Programm überhaupt nicht zum Ausgangspunkt zurück, muss der Fehler also in der inneren Schleife stecken.
Weitersuchen
Setzen Sie also in Zeile 15 einen neuen Breakpoint. Trotz des vorherigen »delete« heißt er Breakpoint 2 statt 1 (siehe Kasten "Breakpoint-Nummern"). Starten Sie das Programm im Debugger neu. Listing 6 zeigt, wie es am Breakpoint in der Funktion »CalcChangeFor()« stoppt. Beobachten Sie anschließend die Zählvariable »i« der Schleife:
(gdb) disp i
3: i = 0
(gdb) c
Continuing.
Breakpoint 2, CalcChangeFor (cent=23) at
change.c:15
15 val = coins[i];
3: i = 1
Die erste Iteration sieht gut aus, der Zähler steht, wie er soll, auf »1«. Die Suche geht also weiter, wenn Sie das Programm fortsetzen:
(gdb) c
Continuing.
Breakpoint 2, CalcChangeFor (cent=23) at
change.c:15
15 val = coins[i];
3: i = 1
Obwohl der Ausdruck »i++« in Zeile 14 den »i«-Wert um 1 erhöht, steigt der Wert der Variablen nicht. Beim Finden der dafür verantwortlichen Programmabschnitt helfen Watchpoints.

|
Abbildung 1: Grafische Entwicklungsumgebungen wie KDevelop greifen ebenfalls auf GDB zurück.
|
| Whitepaper |
|
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele
Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.
Download PDF (Registrierung erforderlich)
|
|
The Role of Open Source in Data Integration
Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.
Download PDF (Registrierung erforderlich)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|