AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Function to be called, ... was eliminated by linker
Thema durchsuchen
Ansicht
Themen-Optionen

Function to be called, ... was eliminated by linker

Ein Thema von Maliko · begonnen am 18. Jul 2022 · letzter Beitrag vom 18. Jul 2022
Antwort Antwort
Maliko

Registriert seit: 20. Jun 2019
91 Beiträge
 
Delphi 10.3 Rio
 
#1

Function to be called, ... was eliminated by linker

  Alt 18. Jul 2022, 13:11
Hoy,

ich hab mal ne Frage an euch. Und zwar hab ich das Problem dass ich hier eine TList habe, in diese über Strg+F7 aber nicht reinschauen kann. Wenn ich versuche List[0] aufzurufen bekomme ich folgende Fehlermeldung zurück:

Zitat:
Function to be called, {System.Generics.Collections}TList<uASDateUtils.TD ateRange>.GetItem, was eliminated by linker
Es funktioniert aber ohne Probleme. Ich kann problemlos durch die Liste iterieren und die Werte auch in anderen Variablen speichern. Ich kann nur nicht im Debugger reinschauen.
Gibt es irgendeine Möglichkeit das abzuschalten, dass der Linker .GetItem eliminiert weil GetItem als inline gekennzeichnet ist?

Vielen Dank schon mal im Voraus.

Viele Grüße
Maliko

Geändert von Maliko (18. Jul 2022 um 13:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.586 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Function to be called, ... was eliminated by linker

  Alt 18. Jul 2022, 13:18
Ich habe es nicht getestet, aber wenn du an einer Stelle {$INLINE OFF} verwendest, an der du darauf zugreifst, sollte der Compiler den Aufruf nicht inline umsetzen und somit die Funktion zur Verfügung stehen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#3

AW: Function to be called, ... was eliminated by linker

  Alt 18. Jul 2022, 13:18
An der Stelle, wo dein Debugger sich grade befindet, ist die gewünschte Funktion nicht verfügbar, z.B. weil sie "dort" garnicht verwendet wurde, weswegen der Compiler dort die nötigen Funktionen+Debuginos nicht eingebunden hat.

Lösung: Die Funktion, welche man im Debugger braucht, auch im Code aufrufen.

Und sei es innerhalb eines IF-THEH, was zur Laufzeit mit False übersprungen wird.
kein if False then , welches der Compiler direkt auflöst und wo er dann den Inhalt nach dem THEN weglassen kann, weil es ja "niemals" genutzt werden würde.




In deinem Fall wird über das Inline diese Funktion ja "weggelassen" und stattdessen direkt der Funktionsinhalt eingebunden.
Daher ist diese Funktion auch nicht im Code und kann auch nicht vom Debugger genutzt werden.

Zitat:
Es funktioniert aber ohne Probleme
Klar, der Code innerhalb dieser Funktion ist ja da, nur liegt er eben nicht in dieser Funktion, weil Diese ja weggelassen werden sollte. (inline)


[edit] Wie schon gesagt wurde, das Inline deaktivieren.
Alternativ oben die Unit weglassen, die für das was in der Funktion drin ist, damit das Inline nicht ausgeführt werden kann.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (18. Jul 2022 um 13:23 Uhr)
  Mit Zitat antworten Zitat
Maliko

Registriert seit: 20. Jun 2019
91 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Function to be called, ... was eliminated by linker

  Alt 18. Jul 2022, 13:40
Vielleicht kannst du mir da genauer weiterhelfen, da ich zugeben muss, das ich deine Antwort nicht ganz verstehe. Das ist mein Aufruf.

Delphi-Quellcode:
Variables.TryGetValue('fakturavon', mVon);
Variables.TryGetValue('fakturabis', mBis);
FDictFaktura := TASDateUtils.SplitDateRange(mVon, mBis);
Wenn ich jetzt versuche in FDictFaktura reinzuschauen, dann bekomme ich den Fehler. Rufe ich die Funktion im Debugger direkt auf, dann funktioniert es (was aber scheiße ist, da ja jedes mal die Funktion gecalled wird, was bedeutet, das jedes mal unter umständen dann auch ein DB-Query abgeschossen wird, nur weil man in die entsprechenden Indizes sehen möchte.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

AW: Function to be called, ... was eliminated by linker

  Alt 18. Jul 2022, 15:05
Zitat:
Delphi-Quellcode:
type
  TList<T> = class(TEnumerable<T>)
    ...
    function GetItem(Index: Integer): T; inline;
    ...
  end;

function TList<T>.GetItem(Index: Integer): T;
begin
  // CheckItemRange(Index) is expanded here manually to improve codegen
  if Cardinal(Index) >= Cardinal(FCount) then
    ErrorArgumentOutOfRange;
  Result := List[Index];
end;
Getitem, bzw. Item kannst du im Debugger nicht benutzen, weil es Dieses "nicht" als Funktion gibt, da durch INLINE weboptimiert.

geht nicht: xxx[i] oder xxx.Item[i]

würde gehen: xxx.List[i]


Ja, für Debugging ist dieses INLINE hier echt blöd.
Könntest also das Inline also deaktivieren, oder alternative Funktionen nutzen, welche es "gibt".

{$INLINE OFF} , bzw. in den Projektoptionen.
https://docwiki.embarcadero.com/RADS...line_Directive
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz