Hallo,
ich versuche den einen oder anderen im Mantis der Jcl gemeldeten Bug zu beseitigen.
Leider bin ich da gerade steckengeblieben und der Debugger macht komische Sachen.
Ich habe versucht dieses Problem testweise zu beheben:
http://issuetracker.delphi-jedi.org/view.php?id=6637
Dazu habe ich den als Konsolenprogramm dort vorhandenen Demo Code in ein wirkliches
Rio 10.3.1 Konsolenprogramm gepackt und ja, er zeigt den Fehler an. Ich habe natürlich ein ReadLn am Ende ergänzt.
Danach habe ich die JclQueues.pas meiner regulären JCL Installation wie folgt geändert:
Delphi-Quellcode:
procedure TJclUnicodeStrQueue.AutoGrow;
begin
if FHead > FTail then
SetCapacity(CalcGrowCapacity(FCapacity, FCapacity - FHead + FTail + 1)) // looped
else
SetCapacity(CalcGrowCapacity(FCapacity, FTail - FHead + 1));
end;
Und natürlich habe ich das im protected Abschnitt der entsprechenden Klasse diese Methode als
override deklariert.
Dann habe ich auf das if in AutoGrow einen breakpoint gesetzt und das Konsolenprogramm neu
compiliert und ausgeführt.
Was tut es nun?
1. es hält erstmal nicht an dem Breakpoint sondern gibt beide Fehlermeldungszeilen aus
2. drücke ich Enter, springt er in meinen Breakpoint, führt angeblich den Code im if aus,
obwohl angeblich beide verglichenen Variablen 0 enthalten, also die erste nicht größer
als die zweite ist
3. single steppe ich weiter, geht er in jede Zeile auch die Leerzeile nach der AutoGrow Methode,
nach dieser Leerzeile biegt er ab nach JclSynch.pas TJclMultiReadExclusiveWrite.BeginWrite;
Warum tut der Debugger das?
Wie packe ich das richtig an, damit ich den Fix mal testen kann?