AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Gemeiner Programmabsturz, wie weiter machen?

Gemeiner Programmabsturz, wie weiter machen?

Ein Thema von wicht · begonnen am 2. Mai 2011 · letzter Beitrag vom 2. Mai 2011
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#1

Gemeiner Programmabsturz, wie weiter machen?

  Alt 2. Mai 2011, 15:48
Hi Forum.

Die Frage ist vielleicht etwas 'doof', aber ich war noch nie in dieser Situation. Darum wollte ich mal fragen, was ihr in so einem Fall macht, oder wie ich überhaupt weiterkomme.
Also, Programm gebaut, sogar madExcept mit drin. Zuhause ist es schon seit Monaten nicht mehr abgestürzt, und absichtliche Exceptions zum testen zeigen mir auch das madExcept-Fenster wie gewünscht. Das Programm nutze ich, einfach um zu sehen, wie es so läuft, nebenbei auch auf der Arbeit. Manchmal verabschiedet es sich dann allerdings - kein madExcept kommt, einfach dieses Fenster "Programm hat ein Problem und muss beendet werden", dadrunter läuft dann diese Marquee-Progressbar, wie das seit Vista eben so ist. Nach ein paar Sekunden kommt dann die Frage, ob ich debuggen möchte. Habe hier allerdings kein Delphi, nur Visual Studio. Dann kann ich wohl zu der Adresse springen, wo es geknallt hat. Die Frage, die ich mir jetzt stelle, ist, ob mir diese Information irgendetwas bringt..

Das sieht bei einer der letzten Builds des Programms so aus:

Code:
004054CA je         004054D3 
004054CC mov        dl,1 
004054CE mov        ecx,dword ptr [eax]
004054D0  call       dword ptr [ecx-4]    <-- Bumm
004054D3  ret            
004054D4  push       ebx
004054D5  push       esi
Bei der aktuellen so:

Code:
0040550A je         00405513 
0040550C mov        dl,1 
0040550E mov        ecx,dword ptr [eax]
00405510  call       dword ptr [ecx-4]    <-- Bumm
00405513  ret
00405514  push       ebx
00405515  push       esi
Wie würdet ihr mit diesem Problem jetzt weiter verfahren? Wie kommt man mit diesen Infos an die Stelle Delphi-Code, die hier Probleme macht? Oder wäre es am besten, Delphi auf diesem Rechner hier zu installieren? Ist nur etwas blöd, für den Firmenrechner eine Aktivierung mit meiner Lizenz durchzuführen..

Würde mich sehr über Antworten sehr freuen!


Liebe Grüße und TIA,

Alex
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Gemeiner Programmabsturz, wie weiter machen?

  Alt 2. Mai 2011, 16:14
Kann man madExcept so einrichten, dass es lediglich im Debug-Modus anspringt? Nutze das leider nicht, aber denkbar wäre es. Daher könntest du evtl. auch nicht eine passende Meldung erhalten.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Gemeiner Programmabsturz, wie weiter machen?

  Alt 2. Mai 2011, 16:26
Man könnte das Problem indirekt durch exzessives Logging angehen.
Aber das ist nicht unbedingt optimal. Ich mache das bei all den Debugversionen meiner Projekte so!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Gemeiner Programmabsturz, wie weiter machen?

  Alt 2. Mai 2011, 16:37
Das dem Programm die Handlungsfähigkeit (weit nach der Initialisierung) völlig entzogen wird, ist ja dann fast immer ein DEP-Problem, oder?

Die erste Frage wäre dann, ob die Bereichsprüfung eingeschaltet ist.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#5

AW: Gemeiner Programmabsturz, wie weiter machen?

  Alt 2. Mai 2011, 16:59
Nachdem Delphi das Programm einmal ausgeführt hat und danach nicht geschlossen wurde, kannst du mit Suche->Laufzeitfehler die Adresse des Fehlers eingeben und kommst zu dem CPU-Fenster. Dort wird dir neben dem ASM-Code hoffentlich auch ein wenig deines Delphi-Codes angezeigt. Wenn nicht, dann ist das Pech.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#6

AW: Gemeiner Programmabsturz, wie weiter machen?

  Alt 2. Mai 2011, 19:30
Danke erstmal für eure Antworten!

Kann man madExcept so einrichten, dass es lediglich im Debug-Modus anspringt? Nutze das leider nicht, aber denkbar wäre es. Daher könntest du evtl. auch nicht eine passende Meldung erhalten.
Habe ich vor dem Bauen überprüft und gerade nocheinmal getestet. Funktioniert im Release-Modus.

Man könnte das Problem indirekt durch exzessives Logging angehen.
Aber das ist nicht unbedingt optimal. Ich mache das bei all den Debugversionen meiner Projekte so!
Naja. Eigentlich würde ich auch so vorgehen, aber dafür wäre es schön, zu wissen, womit der Fehler zu tun hat, oder dass er irgendwie reproduzierbar ist. Er tritt aber dummerweise einfach irgendwann auf. Das wäre also die Möglichkeit, die ich als letztes angehen würde.

Das dem Programm die Handlungsfähigkeit (weit nach der Initialisierung) völlig entzogen wird, ist ja dann fast immer ein DEP-Problem, oder?

Die erste Frage wäre dann, ob die Bereichsprüfung eingeschaltet ist.
Bereichsprüfung ist deaktiviert. DEP ist bei mir nur für "erforderliche Windows-Programme und -Dienste" aktiv. Morgen mal schauen, wie das auf dem anderen Rechner parametriert ist.

Nachdem Delphi das Programm einmal ausgeführt hat und danach nicht geschlossen wurde, kannst du mit Suche->Laufzeitfehler die Adresse des Fehlers eingeben und kommst zu dem CPU-Fenster. Dort wird dir neben dem ASM-Code hoffentlich auch ein wenig deines Delphi-Codes angezeigt. Wenn nicht, dann ist das Pech.

Bernhard
Das hört sich sehr interessant an. Leider habe ich unter "Suche" keinen Punkt "Laufzeitfehler". Ich kann nur Pausieren, dann das CPU-Fenster aufmachen, und sagen "Gehe zu Adresse..." - dann stehen in der Ansicht überall nur "???" .. Mache ich irgendetwas falsch?


Nochmal vielen Dank für die Hilfe.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#7

AW: Gemeiner Programmabsturz, wie weiter machen?

  Alt 2. Mai 2011, 19:38
Nun, so einfach dürfte das nicht gehen.
Die Imagebase Adresse kann und wird vom PE Loader geändert (warum - spielt keine Rolle).
Deshalb solltest du, falls das Programm abstürtzt, nicht nur die Adresse, an die EIP zuletzt gezeigt hat, war merken, sondern auch die Imagebase. Und am besten merkst du dir nur die Differenz der beiden (Letzte Adresse - Imagebase). Dann hast du nämlich die relative virtuelle Adresse und kannst bei dir daheim dann deiner eigenen Imagebase (der Exe, zur Laufzeit ermittelt) diesen relativen Wert aufaddieren und hast letztendlich somit die Adresse, wo es geknallt hat.
Ist schwer zu verstehen, wenn man keine Ahnung von PE (PortableExecutable Format) hat, aber du kannst gerne nachfragen, falls es dich interessiert.
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#8

AW: Gemeiner Programmabsturz, wie weiter machen?

  Alt 2. Mai 2011, 19:41
Genau deswegen hatte ich ja auch geschrieben, möglichst Delphi nach dem Kompilat nicht mehr zu bedienen, da dann noch die Funktion aktiv ist und Delphi nicht neu kompiliert, wodurch sich alles ändern kann.

Bernhard

ADD: Es gibt immer noch die Möglichkeit einer MAP-Datei. Darin steht dann, was wo im Speicher liegt. Das ist dann aber nicht mehr mein Gebiet.

ADD2: Ich hab mal ein Screen hochgeladen, wo bei mir diese Option im Menü ist.
Miniaturansicht angehängter Grafiken
screen_laufzeitfehler.jpg  
Bernhard
Iliacos intra muros peccatur et extra!

Geändert von rollstuhlfahrer ( 2. Mai 2011 um 19:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#9

AW: Gemeiner Programmabsturz, wie weiter machen?

  Alt 2. Mai 2011, 19:44
Das hat nichts mit dem Kompilieren zu tun. Der PE Loader macht das zur Laufzeit, falls es nötig ist.
Auf verschiedenen Systemen (kommt darauf an, wie der RAM Speicher belegt ist), kann er verschieden reagieren!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#10

AW: Gemeiner Programmabsturz, wie weiter machen?

  Alt 2. Mai 2011, 21:40
In dem Fall hat sich die Imagebase nicht geändert und es ist auch sehr unwahrscheinlich, dass sie sich beim Programm ändert. Setz im Programm nen Breakpoint am Start der aufgerufen wird und drück STRG+ALT+C dann STRG+G und gib die Adresse mit $ ein.

Im übrigen ist es sehr wahrscheinlich ein Aufruf von TObject.Free

Delphi-Quellcode:
00403559 E87A010000 call @ClassDestroy
0040355E C3 ret
0040355F 90 nop
TObject.Free:
00403560 85C0 test eax,eax
00403562 7407 jz $0040356b
00403564 B201 mov dl,$01
00403566 8B08 mov ecx,[eax]
00403568 FF51FC call dword ptr [ecx-$04]
0040356B C3 ret
TObject.InitInstance:
0040356C 53 push ebx
0040356D 56 push esi
Im übrigen kannst du auch Delphi installieren und die 30 Tage Testversion verwenden, musst es also nicht aktivieren.

Geändert von brechi ( 2. Mai 2011 um 21:53 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:44 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