Wenn zuviel zerschossen wurde (vor allem der Stack überschrieben), dann kann es passieren, dass sich hier nichts mehr machen lässt.
Erste Versuche:
- Aktiviere mal in den Projektoptionen das Erstellen der Stack-Frames. (bei kleinen Funktionen können die sonst wegoptimiert werden und erschweren das Auslesen des Stacks)
- im Debug-Profil sollte das aber standardmäßig aktiv sein
- und zusätzlich das Inlineing deaktivieren
- siehe Projektoptionen > Erzeugen > Compilieren > Quelltexterzeugung
und drüber unter Debuggen die Debuginfos und Symbolinfos aktiv
- Alternativ für 64 Bit kompilieren, denn da wurde etwas "ausgemistet" (immer Stackframes und nur noch eine Aufrufkonvention, welche zufällig fast so aussieht, wie Pascal es schon immer macht > von links nach Rechts zuerst in die Register)
- Optimierungen aus kann, aber muß hier nicht sein (wichtiger sind die Optionen den Stack betreffend)
Ingame den Stacktrace auslesen
- selbst den Stack auslesen (WalkStack oder so), aber hilft nichts, da Delphi leider keine programmseitigen Debuginfos liefert, bzw. man die nicht auslesen kann,
und leider sind sie auch zu doof eine Option anzubieten zusätzlich die Debuginfos in einem Windows-Format anzubieten.- du kannst natürlich die gelieferten Adressen manuell in der MAP Datei nachlesen, welche man sich erstellen lassen kann
- oder im CPU-Fenster schauen, was an den Addressen angezeigt wird (kurz davor)
- oder man lässt sich die MAP von Fremdprogrammen in eine DBG- oder PDB-Datei konvertieren, mit der die DebugAPI etwas anfangen kann SymGetSymFromAddr)
- eine Mini-Fehlerbehandlung lässt sich relativ leicht selber basteln (3 Funktionen), wem sowas wie Eurekalog zuviel ist, was sich mit all seinen kranken Hocks und Hacks im Programm breit macht)
- oder z.B. sowas wie MadExcept, Eurekalog oder das JEDI-Errorzeugs
oder manuell am Programmablauf rumpfuschen
- zuerst
- Tools > Optionen > Debugger-Optionen > Embarcadero-Debugger > Native BS-Exceptions
- 32 Bit > Zugriffsverletzung ($C0000005) > Debugger + Behandelt
- F9
- warten bis es dort wieder knallt
- Debuggermeldung: Anhalten
- wenn im Code gelandet: Ansicht > Debug-Fenster > CPU-Fenster > CPU (Strg+Alt C)
- es ist immernoch ein Sch****dreck, dass neue Delphi-Projekte seit zuvielen Jahren per Standard mit Debug-DCUs kompileren, obwohl die standardmäßig kein Schwein braucht
- Problemzeilen überspringen (hier bis zum RET, also Selektion dort draufsetzen)
- dort im Context-Menü > Neuer EIP (Strg+N)
- und mit F7 fortsetzen
- mal sehen wo es dann weitergeht (erstmal aus deinen beiden Copy/Move-Prozeduren raus)