AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Warum habe ich manchmal keinen Stack bzw. was tue ich dann?
Thema durchsuchen
Ansicht
Themen-Optionen

Warum habe ich manchmal keinen Stack bzw. was tue ich dann?

Ein Thema von Der schöne Günther · begonnen am 8. Dez 2019 · letzter Beitrag vom 8. Dez 2019
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Warum habe ich manchmal keinen Stack bzw. was tue ich dann?

  Alt 8. Dez 2019, 14:30
Angenommen ich habe im laufenden Programm eine Access Violation. Wenn ich im Debugger anhalte sehe ich nur dass es im Hauptthread passiert. Der Stack ist praktisch leer:

Code:
System.Move(???,???,???)
System._CopyRecord
anmerkung-2019-12-08-142802.png

Die .exe ist mit allen möglichen Debug-Daten, alle Optimierungen sind aus. Win32. Was mache ich falsch? Warum habe ich keinen Stack?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Warum habe ich manchmal keinen Stack bzw. was tue ich dann?

  Alt 8. Dez 2019, 17:49
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 (MSDN-Library durchsuchenWalkStack 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 MSDN-Library durchsuchenSymGetSymFromAddr)
      • 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)
$2B or not $2B

Geändert von himitsu ( 8. Dez 2019 um 18:10 Uhr)
  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 20:35 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