Programmier-Erfahrungen...

Für sonstige Unterhaltungen, welche nicht direkt mit Lazarus zu tun haben

Programmier-Erfahrungen...

Beitragvon Euklid » 17. Okt 2006, 19:08 Programmier-Erfahrungen...

Kennt ihr dieses Erlebnis?
Ihr programmiert mit aller Sorgfalt, und das Programm läuft eben NICHT auf Anhieb!

Eine andere Erfahrung habe ich noch nicht gemacht. Wär ja mal ne Überraschung.

Die Fehlersuche nimmt bei mir doppelt so viel Zeit ein, wie das Programmieren an sich...
Letztens habe ich in einem nur 50-Zeiligen Programmabschnitt rund 3 Stunden keinen Fehler gefunden. Bis mit aufgefallen ist, dass ich in einer Zeile ein "+1" zu viel hatte. grr...

Besonders ärgerlich ists, wenn das Programm aufgrund fehlerbehafteter rekursiver Aufrufe derart viele Speicherleichen produziert, dass ansonsten nichts mehr läuft.

Weiß jemand, wie man in Lazarus den Debugger so einstellt, dass er den Quelltext Zeile-für-Zeile ausführt? Habe das schon ein paar mal probiert, aber nie großen Erfolg gehabt.
Euklid
 
Beiträge: 2760
Registriert: 22. Sep 2006, 09:38
Wohnort: Hessen

Beitragvon ralli » 18. Okt 2006, 04:59 Aus Fehlern lernen

Die allermeisten programmieren, oder das, was Sie für gutes Programmieren halten, einfach drauflos. Programmiersprachen der neuen Generation verführen ja auch dazu. Hand aufs Herz, wer erstellt schon ein Pflichtenheft ? Wer erstellt schon einen Programmablaufplan ? Ich auch nicht, es sei denn, ein Kunde verlangt es explizit. Aber ich halte mich auch nicht für einen Profi. Informatiker und Mathematiker mit akademischen Abschluß benutzen häufiger wesentlich effizientere Lösungsstrategien. Aber dafür leidet die Lesbarkeit des Codes oft erheblich darunter. Und viele Wege führen nach Rom. Und mein Code ist gut les- und wartbar. An den wichtigen Stellen so dokumentiert, das auch ein anderer Programmierer sieht, was hier passiert. Zu meiner Schande muß ich gestehen, das ich noch nie einen Debugger benutzt habe. Das liegt aber auch daran, das ich noch kein geeignetes Tutorial bis heute gefunden habe, wo ich mich mal mit einarbeiten könnte. Mein wichtigstes Fehlersuch- und Überwachungsinstrument ist daher:
Showmessage(), um den Inhalt von Variablen zu überwachen. Bis jetzt hat es mir gereicht. Und was Fehler angeht, hören wir doch auf mit Machbarkeits- und Pefektionswahn. Wir müssen nicht maschinengleich (fehlerfrei) arbeiten. Mein Motto:
Jeder Fehler ist eine verkleidete Wohltat, vorausgesetzt, wir lernen aus ihm. Und Fehler sind zutiefst menschlich, dies unterscheidet uns von den Maschinen. Allerdings ist es richtig und wichtig, in Strukturen und Algorithmen zu denken, nicht jeder hat eine Begabung dazu. Wenn ich daran denke, wieviele Anwender mit Programmen arbeiten, die ich mal geplant und erstellt habe, muß doch wohl einiges richtig gewesen sein.

Ralli
ralli
 
Beiträge: 383
Registriert: 13. Sep 2006, 14:57
Wohnort: Hagen a.T.W.

Beitragvon mschnell » 18. Okt 2006, 08:27

Hast Du schon 'mal C benutzt ? Da ist aufgrund der Syntax und der bicht-existenz des types "boolean" die Gefahr viel größer schwer zu entdeckende Fehler dieser Art zu machen. Ich habe einmal tagelang an einem Problem gesucht, das dadurch entstand, dass ich ein "!" ("not" in C) anstelle eines "|" ("or" in C) getippt habe. Kann man am Bilschirm kaum unterscheiden !

Single-Step ausführung ist die Grundlage jedes Debuggings. Wenn Lazarus das nicht könnte, wäre es nicht zu brauchen. Geht Delphi-kompatibel mit F7 und F8. Dazu ist keine besondere Einstellung notwendig.

-Michael
mschnell
 
Beiträge: 3243
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon ralli » 18. Okt 2006, 08:33 Lernprozess

Ja dann will ich mich mal da reinknien, man lernt ja nie aus, auch nicht als 56 jähriger alter Hase.

Ralli
ralli
 
Beiträge: 383
Registriert: 13. Sep 2006, 14:57
Wohnort: Hagen a.T.W.

Beitragvon Christian » 18. Okt 2006, 09:46

In den Debugger einstellungen muss GNU Debugger ausgewählt sein und der Pfad muss auf lazarus\mingw\bin\gdb.exe zeigen
im Linux hilft "where gdb" den pfad zu finden vorrausgesetzt das paket gdb ist installiert ...
Programm wird mit F9 im Debugger gestartet.
Indem du vor die Zeile klickst (auf die graue fläche) setzt du dort einen Breakpoint an dem der Debugger anhält dann kannst du mit F7 (schritt hinein z.b. in eine funktion)
und F8 (schritt überspringen springt nicht inb die funktion sondern führt sie im ganzen aus)
darin navigieren willst dui das Programm normal weiterlaufen lassen: wieder F9
Also debugging ist für mich lebensnotwendig sonst würd ich aus der fehlersuche nicht mehr rauskommen da ich meisst ganze klassen am stück zusammenhämmere und dann erst starte.
Es ist auch ein interner direkt in die IDE integrierter Debugger in Arbeit (gdb ist etwas träge und benötigt diese riesen debug symbole weshalb immer diese zum 10000 mal beantwortete Frage "warum sind die Lazarus Executables so gross" kommt).
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Christian
 
Beiträge: 6101
Registriert: 21. Sep 2006, 06:51
Wohnort: Dessau
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z) | 
CPU-Target: AVR,ARM,x86(-64)
Nach oben

Beitragvon ralli » 18. Okt 2006, 10:19 Alles Buggy oder was ?

Danke Christian,

dann kann ich ja durchstarten und das Debuggen üben.

Ralli
ralli
 
Beiträge: 383
Registriert: 13. Sep 2006, 14:57
Wohnort: Hagen a.T.W.

Beitragvon Christian » 18. Okt 2006, 11:16

Bei debuggen üben fällt mir noch ein das ich letztlich Probleme mit tdbf hatte Locate funktionierte manchmal einfach nicht. Schien so als wenn der Datensatzzeiger eine zeile vor dem zu lokalisierenden Datensatz stand und er den dann nicht gefunden hat. Genau nachvollziehn konnt ichs aber noch nicht ist die da mit deinem dbmaler noch nichts aufgefallen ?!
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Christian
 
Beiträge: 6101
Registriert: 21. Sep 2006, 06:51
Wohnort: Dessau
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z) | 
CPU-Target: AVR,ARM,x86(-64)
Nach oben

Beitragvon Euklid » 18. Okt 2006, 13:21

Hallo Christian, Michael und Ralli!

Zunächst mal vielen Dank für den Tipp mit dem gdb-Debugger. Dieses Zeile-für-Zeile-Debugging hatte ich nämlich aus Delphis Zeiten vermisst. Hatte in Lazarus schon F7 und F8 ausprobiert - es kam aber bisher immer eine Meldung, mit der ich nichts anfangen konnte.
Klappt jetzt wunderbar!

Ich bin Hobby-Programmierer. Mit dem Computer-Algebra-System schreibe ich vielleich am ersten Programm, dass möglicherweise mal von mehreren Anwendern als nur von mir verwendet wird ;)

Trotzdem bin ich recht penibel, was sauberen Code angeht. Aus den Variablen-Namen ist erkennbar, was gemeint ist; Bei Schleifen sieht man sofort, wo sie beginnen und enden. Mein Motto ist:
Ein gut strukturierter Quelltext muss so gut lesbar sein, wie ein Buch.
Aber gerade bei sehr verschachtelten Funktionen, etwa Funktionen, die sowohl rekursiven als auch iterativen Charakter haben, wirds oft trotzdem sehr unübersichtlich. Oft sieht man da den Fehler nicht, da er sich erst langsam, über mehrere Iterationen hinweg aufaddiert....
Euklid
 
Beiträge: 2760
Registriert: 22. Sep 2006, 09:38
Wohnort: Hessen

Beitragvon Christian » 18. Okt 2006, 13:55

naja wirklich schlimm wirds erst bei multithread programmieung unter linux da man dort nicht mehr debuggen kann da X singlethreaded ist und sich so das ganze X aufhänge wenn lazarus einen breakpoint anspringt lol
gibts zwar auch workarounds für aber etwas umständlich
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Christian
 
Beiträge: 6101
Registriert: 21. Sep 2006, 06:51
Wohnort: Dessau
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z) | 
CPU-Target: AVR,ARM,x86(-64)
Nach oben

Beitragvon Euklid » 18. Okt 2006, 16:27

Christian hat geschrieben:naja wirklich schlimm wirds erst bei multithread programmieung unter linux da man dort nicht mehr debuggen kann da X singlethreaded ist und sich so das ganze X aufhänge wenn lazarus einen breakpoint anspringt lol


Wenn ich dich richtig verstanden habe, hängt sich X nur beim Debuggen von multithread-Programmen auf?
Laufen tuen sie doch hoffentlich ohne größere Umstände?

Ich frage, weil wir im oben schon angesprochenen Projekt die Möglichkeit in Betracht ziehen, rechenintensive Aufgaben auf zwei verschiedene Threads zu verteilen, um die multicore-Eigenschaften mancher Prozessoren ausnutzen zu können. Dabei soll das Programm auch auf Linux lauffähig sein.
Euklid
 
Beiträge: 2760
Registriert: 22. Sep 2006, 09:38
Wohnort: Hessen

Beitragvon Christian » 19. Okt 2006, 20:23

Ja laufen tun sie natürlich.
Mit TThread.Suspend und TThread.Resume scheint unter linux nich nicht richtig zu laufen hab ich aber schon ne weile nicht mehr probiert.
Nur wenn du innerhalb einer Thread procedure einen breakpoint setzt hilft nur noch Server abschiessen.

Edit:
hab aber auch auf der fpc-devel list gesehn das gerade irgendwas an den threads umgestrickt wird.
Zuletzt geändert von Christian am 20. Okt 2006, 16:20, insgesamt 1-mal geändert.
Christian
 
Beiträge: 6101
Registriert: 21. Sep 2006, 06:51
Wohnort: Dessau
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z) | 
CPU-Target: AVR,ARM,x86(-64)
Nach oben

Beitragvon Euklid » 20. Okt 2006, 15:25

gut zu wissen ^^
Euklid
 
Beiträge: 2760
Registriert: 22. Sep 2006, 09:38
Wohnort: Hessen

Beitragvon mschnell » 25. Okt 2006, 11:03

Christian hat geschrieben: Mit TThread.Suspend und TThread.Resume scheint unter linux nich nicht richtig zu laufen hab ich aber schon ne weile nicht mehr probiert.

OOps ! Hört sich nach Kathastrophe an !

Wenn TThread.Suspend und TThread.Resume nicht geht, funktioniert TThread.Synchronize vermutlich auch nicht, weil es darauf basiert. Und Synchronize ist ja so ziemlich die einzige in der Library vorgegebene Art der inter-Thread Kommunikation. Alles andere (wie Messages) ist Platform-spezifisch.

Gibt es inzwischen irdendwo eine Platform-übergreifende Thread-Kommuninikations-Library für Free Pascal ?!?!?!?

-Michael
mschnell
 
Beiträge: 3243
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon mschnell » 25. Okt 2006, 11:06

Christian hat geschrieben: hab aber auch auf der fpc-devel list gesehn das gerade irgendwas an den threads umgestrickt wird.


Kannst Du genaueres sagen und/oder einen Link angeben ?

-Michael
mschnell
 
Beiträge: 3243
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon Christian » 25. Okt 2006, 13:10

Brauchst doch nur in die devel list schauen ...
Und Synchronize basiert nicht auf Suspend und Resume wie kommst du darauf ?
Synchronize arbeitete solang ich die Threads benutze immer korrekt.
Und das mit dem Suspend und Resume kann auch anwendungsspezifisch bei mir sein ist mir z.Z. auch nicht soo wichtig.
Probiers doch einfach mal aus.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Christian
 
Beiträge: 6101
Registriert: 21. Sep 2006, 06:51
Wohnort: Dessau
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z) | 
CPU-Target: AVR,ARM,x86(-64)
Nach oben

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Dies und Das



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried