![]() |
AW: Funktion vom Linker entfernt..
Generationen später.
Ich habe immer noch das gleiche Problem. Gibt es generell ein "Linker, entferne nichts ungenutztes!", das man irgendwo einbauen kann? Mit Gewalt irgendwo gezwungene Aufrufe für irgendwas einzubauen (meinetwegen umgeben von einem "IFDEF DEBUG"-Block) ist ja irgendwie keine schöne Lösung. |
AW: Funktion vom Linker entfernt..
Aktuell wird nichts mehr entfernt.
es ist eher so, daß man jetzt (mindestens seit XE3) dem Compiler explizit sagen muß, daß er ungenutzte Methoden weglassen soll. (vorallem bei Published-Methoden, aber ich weiß jetzt nicht, ob das auch alle anderen Methoden betrifft) Drum werden die EXEn auch immer größer. (und wegen der RTTI) Delphi geht quasi davon aus, daß man die Funktionen dennoch nutzen und z.B. indirekt via RTTI aufrufen könnte, selbst wenn sie nirgendwo explizit aufgerufen wird. Aber wozu soll denn ungenutztes Zeug mit in die EXE gelinkt werden, wen du es eh nicht verwendest? |
AW: Funktion vom Linker entfernt..
Ganz konkretes Beispiel: Wenn ich im Debugger in meiner DEBUG-Fassung eine Interface-Referenz nehmen möchte und sie auf eine Klassen-Referenz casten möchte. Dann kann ich das nicht, denn "SafeIntfAsClass wurde vom Linker entfernt".
Nun muss ich in der Debug-Fassung meines Projekts einmal künstlich so einen Cast einbauen damit der Linker es nicht entfernt. Mit der Zeit treffe ich immer wieder auf andere Aufrufe die beim Debuggen nützlich sind, aber entfernt wurden. Daher meine Frage: Kann ich nicht irgendwo an (bislang nicht gefundenen Linker-Optionen) einstellen, dass er bitte einfach alles aus den inkludierten Units mitnimmt und nichts entfernt? |
AW: Funktion vom Linker entfernt..
Diese Methoden einfach mal published zu machen hilft nicht?
|
AW: Funktion vom Linker entfernt..
Liste der Anhänge anzeigen (Anzahl: 3)
Ich erkläre es mal andersherum.
Gegeben sei folgendes:
Delphi-Quellcode:
Bild 1: Ich habe eine
IMyInterface = interface
// end; TMyClass2 = class(TInterfacedObject, IMyInterface) protected var someInternalStuff: Single; end;
Delphi-Quellcode:
-Variable. Der Compiler sagt mir direkt, dass sich dahinter eine
IMyInterface
Delphi-Quellcode:
-Instanz verbirgt. Soweit alles super. :thumb:
TMyClass2
Bild 2: Jetzt möchte ich die Variable auf
Delphi-Quellcode:
casten um zu sehen, was denn
TMyClass2
Delphi-Quellcode:
für einen Wert hat. Da ich so etwas im Quelltext nie gemacht habe, hat der Linker das entfernt.
someInternalStuff
Bild 3: Die Lösung: Um das zu umgehen muss ich halt im Quelltext einfach mal ein Interface zu einem Objekt casten. Dann geht es. Was ich suche: Eine Alternative dazu. Der Fall "Interface zu Objekt" ist ja nur ein Beispiel. Ich würde gerne vermeiden, immer Aufrufe zu sammeln, die ich in der Debug-Fassung einmal künstlich aufrufen muss. Gibt es da einen Weg? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz