TAChart untypische X-Achse - wie umgehen ?
- af0815
- Lazarusforum e. V.
- Beiträge: 7075
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TAChart untypische X-Achse - wie umgehen ?
Lazarus 4.99 (rev main_4_99-3250-g0f474c78c5) FPC 3.2.2 x86_64-linux-gtk2
Aktueller stable (3.2.2) fpc und Lazarus main
Jedes mal exakt gleiches Projekt.
Aktueller stable (3.2.2) fpc und Lazarus main
Jedes mal exakt gleiches Projekt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: TAChart untypische X-Achse - wie umgehen ?
Danke. Hab' mir nun per FPCUpDeluxe FPC/main + Laz/Main in der Linux-VM installiert und konnte den Fehler gleich bestätigen, er tritt sogar bei dem leeren Default-Chart auf, nicht nur unter gtk2, sondern auch unter gtk3 und qt5. Der Fehler war nach kurzem Debuggen schnell gefunden: FPC3.3.1 scheint massive Probleme mit "inline" zu haben, hier war es die FunktionTValuesInRangeParams.CountToStep(ACount: Integer): Double in unit TACustomSource. Entferne hier das "inline" im Interface-Teil, und der Fehler ist weg.
Hier ein kleines Test-Programm, das das nachstellt:
Der Output mit FPC 3.2.2 ist der Wert 1, mit FPC 3.3.1 der Wert -12.382, und wenn man das "inline" auskommentiert wieder der Wert 1.
Ich fürchte bei so einem fundamentalen Bug stecken noch einige Bomben in jedem Projekt, das "inline" verwendet.
Hier ein kleines Test-Programm, das das nachstellt:
Code: Alles auswählen
program project1;
uses
Math;
var
FMin: Double;
FMax: Double;
function CountToStep(ACount: Integer): Double; inline;
begin
Result := Power(10, Floor(Log10((FMax - FMin) / ACount)));
end;
begin
FMin := -1.012269938;
FMax := +1.012269938;
WriteLn(CountToStep(13));
end.
Ich fürchte bei so einem fundamentalen Bug stecken noch einige Bomben in jedem Projekt, das "inline" verwendet.
- af0815
- Lazarusforum e. V.
- Beiträge: 7075
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TAChart untypische X-Achse - wie umgehen ?
Danke für deine Mühe. Weißt du vielleicht ob das Problem bekannt ist. Weil das kurze Beispiel ist ja eine wirkliche Essenz des Problem.
Für mich heißt das, ich sollte maximal den fixes FPC verwenden.
Edit:
Sollte somit nicht automatisch aktiv sein. Hmm.
Edit2: Ist hier automatisch von Lazarus eingeschalten. Wenn man es ändert und neu clean kompiliert, ändert sich auch nicht am Projekt - interessant.
Für mich heißt das, ich sollte maximal den fixes FPC verwenden.
Edit:
Quelle: https://www.freepascal.org/docs-html/ref/refsu77.htmlBy default, inline procedures are not allowed. Inline code must be enabled using the command-line switch -Si or {$inline on} directive.
Quelle: https://www.freepascal.org/docs-html/prog/progsu36.htmlBy default, Inline procedures are not allowed. This directive must be specified to use inlined code. The directive is equivalent to the command line switch -Si
Sollte somit nicht automatisch aktiv sein. Hmm.
Edit2: Ist hier automatisch von Lazarus eingeschalten. Wenn man es ändert und neu clean kompiliert, ändert sich auch nicht am Projekt - interessant.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: TAChart untypische X-Achse - wie umgehen ?
Es gab mal eine Diskussion über Probleme mit "inline", auf der MailingList, im Forum oder im Rahmen eines Commits oder Bug-Reports - nur finde ich das momentan nicht (leider hat sich mit git die Zahl der Orte, wo etwas diskutiert werden kann, vervielfacht...).
Ich denke trotzdem, dass ich einen Bug-Report schreibe. Vorher will ich evtl. aber noch schauen, ob man das Problem vielleicht noch weiter einkreisen kann.
Leider ist TAChart voll von inline-Prozeduren...
Ich denke trotzdem, dass ich einen Bug-Report schreibe. Vorher will ich evtl. aber noch schauen, ob man das Problem vielleicht noch weiter einkreisen kann.
Leider ist TAChart voll von inline-Prozeduren...
- af0815
- Lazarusforum e. V.
- Beiträge: 7075
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TAChart untypische X-Achse - wie umgehen ?
Was komisch ist, es ändert sich nicht, wenn ich die Einstellung für Inline in Lazarus ändere. Und alles Clean rekompiliere. Damit sollte der Fehler ja weg sein oder habe ich da noch einen Denkfehler.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: TAChart untypische X-Achse - wie umgehen ?
Du meinst die Option "C++-artige Inline-Anweisungen (-Si {$INLINE ON})" in den Projekt-Optionen? Ja, da tut sich bei mir auch nichts, weder nach Änderung in den TAChart-Package-Optionen, noch in den Projekt-Optionen. Die einzigen beiden Arten, den Fehler der Achsen-Labels loszuwerden, sind für mich
- das "inline" in der Deklaration von TValuesInRangeParams.CountToStep (in unit TACustomSource) zu entfernen, oder
- der Unit TACustomSource ein {$INLINE OFF} voranzustellen.
- af0815
- Lazarusforum e. V.
- Beiträge: 7075
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TAChart untypische X-Achse - wie umgehen ?
Sehe, du schreibst gerade einen Bugreport für den fpc. https://gitlab.com/freepascal.org/fpc/s ... sues/41581 Für inline gibt es sogar ein eigenes Label.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).