Autor Beitrag
[r2d2]
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

WinXP
D5 Enterprise
BeitragVerfasst: So 20.02.05 02:06 
Hallo

Ich habe ein 3D-Computerspiel geschrieben, in dem nach einer bestimmten Zeit eine "unkown software exception" auftritt, jedoch nicht auf jedem Rechner. Auf meinem Rechner (AMD Athlon, Grafikkarte: Geforce4ti4200) tritt der Fehler nicht auf, aber auf dem Notebook eines Freundes (Intel Centrino, Grafikkarte: Radeon9700).

Fehlermeldung und die Debug-Informationen sehen folgendermaßen aus:
user defined image

Was kann ich denn mit diesen Informationen anfangen :?: Ich muss nur wissen, in welcher Zeile des Programms der Fehler aufgetreten ist.

Vielen Dank für alle Vorschläge

Klaus
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 20.02.05 02:34 
Das Betriebssystem wäre noch interessant zu wissen.
[r2d2] Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

WinXP
D5 Enterprise
BeitragVerfasst: So 20.02.05 03:31 
Windows XP Professional auf meinem Rechner,
Windows XP Home auf dem Notebook.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 20.02.05 20:09 
Geh mal in deinem Delphi unter Suchen --> Laufzeitfehler. Geb dort die Adresse 00402968 ein, die in der Meldung erscheint. Delphi müsste dann irgendwo in deinem Source stehenbleiben.

Versuch mal, ob er dir dann brauchbarere Sourcestellen zeigt.

Ansonsten versuch mal einen Blick in den Aufruf-Stack zu werfen (Ansicht --> Debug-Fenster --> Aufrufstack)

BTW: Externe Debug-Symbole mitcompilieren und mit einem Debugger alla OllyDbg debuggen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: So 20.02.05 20:19 
wäre interessant wenn sagen könntest was an 0x00402968 steht und dann den quelltext postest
[r2d2] Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

WinXP
D5 Enterprise
BeitragVerfasst: Mo 21.02.05 01:13 
Ich hatte schonmal 0x00402968 in der Laufzeitfehlersuche eingegeben. Die hat dann aber angezeigt, dass sich die Zahl außerhalb des gültigen Bereichs gefindet.
BenBE hat folgendes geschrieben:
Geh mal in deinem Delphi unter Suchen --> Laufzeitfehler. Geb dort die Adresse 00402968 ein, die in der Meldung erscheint. Delphi müsste dann irgendwo in deinem Source stehenbleiben.

Darf ich "0x" einfach weglassen? Hatte das nicht ausprobiert.

Der Quelltext, zu dem die Adresse 0x00402968 passte, existiert inzwischen nicht mehr.
Ich werde also auf dem Notebook nochmal eine Fehlermeldung mit der aktuellen Executable erzeugen. In die Laufzeitfehlersuche gebe ich dann mal die Adresse ohne "0x" ein, das scheint man ja anscheinend so machen zu müssen. Den hoffentlich gefundenen Quelltext werde ich dann posten.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 21.02.05 11:47 
Anstatt 0x musst Du $ eingeben. Ansonsten zeigt Dir Delphi die falsche Stelle.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
[r2d2] Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

WinXP
D5 Enterprise
BeitragVerfasst: Mo 21.02.05 23:29 
Ich hab die Adresse jetz mal mit einem "$" davor eingegeben. Delphi zeigt dann aber keine Stelle im Source-Code an, sondern einfach folgende Stelle im Debug-Fenster:
user defined image

Hat jemand noch einen Vorschlag, wie man die Stelle im Quellcode finden könnte? Ich hab mir schon mal zwei etwas "individuellere" Lösungen überlegt:

1. Ich fange jede Fehlermeldung im Programm mit einer try...except-Konstruktion ab, bei einem Fehler wird dann die Quellcode-Zeile ausgegeben. Würde das so funktionieren? Oder ist meine Fehlermeldung gar keine exception, die man auf diese Weise abfangen könnte?

2. Man könnte das Programm auch in jeder Zeile auf dem Bildschirm die aktuelle Zeilennummer ausgeben lassen. Wenn sich das Programm dann aufhängt, schaut man einfach, welche Nummer auf dem Bildschirm steht und diese Zeile hat als letzte funktioniert. Würde das Spiel halt unspielbar langsam machen.

Bitte helft mir, damit ich keine der beiden oben genannten Lösungen anwenden muss :?
Vielleicht hilft das ja weiter: Im Debug-Fenster steht "ntdll.DbgBreakPoint:".
Klaus
[r2d2] Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

WinXP
D5 Enterprise
BeitragVerfasst: Sa 26.02.05 04:44 
Da anscheinend Keinem eine Lösung für mein Problem eingefallen ist, hab ich in etwa zu Lösung 2 (siehe vorheriger Beitrag) gegriffen.

Ich habe mir ein Programm geschrieben, das den Quelltext des Spiels folgendermaßen verändert: Hinter jeder Quelltextzeile wird eine Zeile eingefügt, in der die aktuelle Zeilennummer einer globalen Variablen zugewiesen wird. Wenn sich das Programm aufhängt, muss ich mir dann nur noch den Wert dieser Variablen anschauen und weiß die Stelle im Code, wo der Fehler aufgetreten ist.
Jetzt hab ich da eine Frage: Auf dem Laptop meines Kumpels ist der Quellcode vom Spiel nicht drauf, und das soll eigentlich auch so bleiben. Wie kann ich den Wert der Variablen auslesen, wenn ich nur das Debug-Fenster mit dem Assembler-Code zur Verfügung hab, nicht den Quelltext? Der Debugger von Delphi5 ist auf dem Laptop.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 28.02.05 11:50 
Markier mal jegliche Befehle im Spiel, bei denen die Frac-Funktion aufgerufen wird.

Dies kann auf die Routinen eingegrenzt werden, die zuletzt vor dem Fehler aufgerufen wurden (Sofern eingrenzbar).

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
[r2d2] Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

WinXP
D5 Enterprise
BeitragVerfasst: Mi 02.03.05 14:15 
Wie finde ich alle Stellen, an denen die Funktion aufgerufen wurde? Direkt rufe ich sie nirgendwo auf, sie wird vermutlich von einer Funktion aufgerufen, die ich selber garnicht geschrieben habe und die sich in irgendeiner Unit befindet. Vielleicht wird sie auch von einer VCL-Komponente aufgerufen (ich verwende die TCP/IP-Komponente für den Netzwerkmodus).
Phobeus
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1280

Linux (FC6), WinXP Pro (Box)
D6 Pers, D7 Pro, FPC 2.x
BeitragVerfasst: Mi 02.03.05 14:24 
Also ein solches Problem ist mir nur bei alten NVIDIA-Treibern begegnet und zwar, dass das Programm auf scheinbar heiterem Himmel abschmiert. Da diese Fehler meistens nicht eindeutig rekonstruirbar sind, sondern plötzlich auftreten:
a) Header aktualisieren (Du die Du scheinbar verwendest haben, IMAO einen solchen Fehler nicht)
b) Treiber aktualisieren
c) Speicher genau testen
d) Peinlichst genau schaun, ob alle States die geöffnet werden, auch wieder geschlossen werden. So maches unausgeglichenes glPushMatrix kann in seltenen Konstellationen auch solche Fehler verursachen. Meist fällt dies aber bereits sehr schnell auf.

_________________
"Menschen sterben nicht wenn man sie zu Grabe trägt, sondern wenn sie ihre Träume verlieren..."