Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Zugriffsverletzung Adresse im Quellcode wiederfinden


Christoph Englmann - Di 10.10.06 12:27
Titel: Zugriffsverletzung Adresse im Quellcode wiederfinden
Hallo,

habe folgendes Problem:
Bei einer bestimmten Aktion, tritt imm wieder der gleiche Fehler auf:
"Zugriffsverletzung bei Adresse 004A610E in Modul 'xx'. Lesen von Adresse 00000000"

Problem:
kann das zugehörige Ereignis im Quelltext nicht finden.

Frage:
Kann ich aufgrund der Fehlermeldung Rückschlüsse ziehen, wo im Quelltext der Fehler auftritt?

danke
christoph


iKilledKenny - Di 10.10.06 12:31

also lesen von adresse 0000000 heisst eigentlich immer nil-pointer exception.
wenn du das gezielt reproduzieren kannst hilft ein breakpoint und anschliessendes durch-steppen des programms...

grüße
alex


Christoph Englmann - Mi 11.10.06 08:02

hallo,

erstmal danke für Deine Antwort...

Problem ist, dass ich keine stelle für nen breakpoint finde...
klingt jetzt komisch, aber nach nem dopplklick erscheint sofort die fehlermeldung und zwar BEVOR es in die proceduren dbclick oder mousedown geht!!!

christoph


iKilledKenny - Mi 11.10.06 08:17

schau mal in den actions bei den OnUpdate-events rein, vielleicht findest du da was. hatte ich bei mir mal, war auch so nicht zu finden.


Sinspin - Mi 11.10.06 11:21

Das problem hatte ich auch schon öfters. beginne einmal gleich von anfang an das programm zu debuggen. also programm mit F8 starten. da kommst du erst durch dein hauptprogramm und dann wird dir solange deine anwendung angezeigt bis du eine aktion ausführst. in deinem fall einen doppelclick.
dadurch, das du im debug modus bist, müsste dann automatisch dein cursor in der passenden ereignisbehandlung stehen.


BenBE - Do 12.10.06 22:50

Viel einfacher:
Programm mit F7 starten (Einzelschritt) und dann unter Suchen --> Laufzeitfehler suchen --> $004A610E --> OK --> Cursor sollte an die richtige Stelle springen ...


Reinhard Kern - Fr 13.10.06 12:34
Titel: Re: Zugriffsverletzung Adresse im Quellcode wiederfinden
user profile iconChristoph Englmann hat folgendes geschrieben:
Hallo,

habe folgendes Problem:
Bei einer bestimmten Aktion, tritt imm wieder der gleiche Fehler auf:
"Zugriffsverletzung bei Adresse 004A610E in Modul 'xx'. Lesen von Adresse 00000000"

Problem:
kann das zugehörige Ereignis im Quelltext nicht finden.

Frage:
Kann ich aufgrund der Fehlermeldung Rückschlüsse ziehen, wo im Quelltext der Fehler auftritt?

danke
christoph


Hallo,

auf die harte traditionelle Tour: lass den Linker ein Map-File erstellen und suche dort nach 004A610E und/oder den nächsten Zahlenwerten davor und danach. Kann aber sehr schwierig werden, z.B. wenn der Fehler in einem Modul der Laufzeitbibliothek auftritt, was oft der Fall ist.

Gruss Reinhard


BenBE - Fr 13.10.06 18:58

Wenn dem so ist: Die MAPfile kannst Du auch automatisch anhand des Omorphia Debug Interface parsen lassen ... Findest Du bei Omorphia im CVS (ODbgMapfile.pas). Wie die Nutzung davon ist, sollte aus dem Source ersichtlich sein ...

Wobei das im Normalfall auch über nen Texteditor recht gut funktioniert ...


Framige - Do 04.01.07 21:06

Bei mir ist fast das gleiche Problem.
Ich sehe lediglich das CPU-Fenster, möchte aber die entsprechende Zeile im Sourcecode wiederfinden.
Ich weis, das ist lediglich eine Einstellungssache. Aber: wo stelle ich das um bzw. gibt es eine
Funktionstaste die mir die Zeile im Sourcecode anzeigt und nicht im CPU-Fenster???
Framige


BenBE - Mo 08.01.07 00:12

Im CPU-Fenster auf den ASM-Code rechhte Maustaste und Haken bei Gemischte Anzeige rein ...

Ein direktes Default gibt's nicht ... Wenn Delphi zu ner File keinen Source hat, dann macht er's CPU-Fenster auf ... Ggf. einfach den Call-Stack immer mit offen halten und auf die nächsthöhere Prozedur springen ... Dann sollte er direkt zum Source weiterspringen.


alias5000 - Mo 08.01.07 00:30

ich freue mich schon auf dein Debugger Tutorial :mrgreen:


hansa - Mo 08.01.07 02:51

user profile iconFramige hat folgendes geschrieben:
..Ich sehe lediglich das CPU-Fenster, möchte aber die entsprechende Zeile im Sourcecode wiederfinden. Ich weiß, das ist lediglich eine Einstellungssache...


"Lediglich" ist lediglich lediglich und keine Einstellungsache. :mrgreen: Dir steht der Quelltext lediglich :mrgreen: wohl nicht zur Verfügung. Um das nun wirklich zu verifizieren, würde ich die in Frage kommende DCU mal überprüfen, ob es da irgendwo eine PAS dazu gibt. Und die ist nicht da. 8)