Entwickler-Ecke

Programmierwerkzeuge - Probleme beim Debuggen in der IDE Access Violation


derkreis - Mo 07.05.12 15:13
Titel: Probleme beim Debuggen in der IDE Access Violation
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt NetLogTS.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x7c929af2: write of address 0x00000010' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

Hallo,

hat irgendjemand eine Idee, warum beim Debuggen des Programms in der IDE von Delphi XE2 U4 direkt nach dem begin noch vor application.initialize dieser Fehler kommt?

Starte ich die EXE direkt, läuft sie normal.

Bin für jede Hilfe dankbar.

Gruß

Ralf


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Di 08.05.2012 um 08:40


Martok - Mo 07.05.12 15:46

Moin!

Das dürfte eine AV in einem initialization-Abschnitt einer eingebundenen Unit sein. Die werden manchmal (meistens?) nicht richtig aufgelöst, sondern am begin des Hauptprogramms angezeigt.

Grüße,
Martok


derkreis - Fr 11.05.12 13:08

Hallo Martok,

hast Du mir eine Idee, wie ich der Unit auf die Schliche komme? Und wenn ich sie hab, wie kann ich das Problem fixen. Es sind eigentlich keine außergewöhnlichen Units:

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,INIFiles, lmdclass, Menus, StdCtrls, ExtCtrls, Registry, LMDWndProcComponent, LMDTrayIcon, LMDCustomComponent, LMDSysInfo, ImgList, IdStack;

Mit dem Ereignislog kann ich nicht wirklich viel anfangen :-( :

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
Thread-Start: Thread-ID: 2572. Prozess NetLogTS.exe (2060)
Prozessstart: C:\Programme\Borland\Prog32\NetLogTS.exe. Basisadresse: $00400000. Prozess NetLogTS.exe (2060)
Modul laden: NetLogTS.exe. Enthält Debug-Infos. Basisadresse: $00400000. Prozess NetLogTS.exe (2060)
Modul laden: ntdll.dll. Ohne Debug-Infos. Basisadresse: $7C910000. Prozess NetLogTS.exe (2060)
Modul laden: KERNEL32.dll. Ohne Debug-Infos. Basisadresse: $7C800000. Prozess NetLogTS.exe (2060)
Modul laden: OLEAUT32.dll. Ohne Debug-Infos. Basisadresse: $770F0000. Prozess NetLogTS.exe (2060)
Modul laden: ADVAPI32.dll. Ohne Debug-Infos. Basisadresse: $77DA0000. Prozess NetLogTS.exe (2060)
Modul laden: RPCRT4.dll. Ohne Debug-Infos. Basisadresse: $77E50000. Prozess NetLogTS.exe (2060)
Modul laden: Secur32.dll. Ohne Debug-Infos. Basisadresse: $77FC0000. Prozess NetLogTS.exe (2060)
Modul laden: GDI32.dll. Ohne Debug-Infos. Basisadresse: $77EF0000. Prozess NetLogTS.exe (2060)
Modul laden: USER32.dll. Ohne Debug-Infos. Basisadresse: $7E360000. Prozess NetLogTS.exe (2060)
Modul laden: msvcrt.dll. Ohne Debug-Infos. Basisadresse: $77BE0000. Prozess NetLogTS.exe (2060)
Modul laden: ole32.dll. Ohne Debug-Infos. Basisadresse: $774B0000. Prozess NetLogTS.exe (2060)
Modul laden: MSIMG32.dll. Ohne Debug-Infos. Basisadresse: $76320000. Prozess NetLogTS.exe (2060)
Modul laden: VERSION.dll. Ohne Debug-Infos. Basisadresse: $77BD0000. Prozess NetLogTS.exe (2060)
Debug-Ausgabe:
SXS: Unable to resolve storage root for assembly directory x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202 in 2 tries

Prozess NetLogTS.exe (2060)
Debug-Ausgabe:
SXS: RtlGetAssemblyStorageRoot() unable to resolve storage map entry.  Status = 0xc0150004

Prozess NetLogTS.exe (2060)
Debug-Ausgabe:
SXS: Unable to resolve storage root for assembly directory x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202 in 2 tries

Prozess NetLogTS.exe (2060)
Debug-Ausgabe:
SXS: RtlGetAssemblyStorageRoot() unable to resolve storage map entry.  Status = 0xc0150004

Prozess NetLogTS.exe (2060)
Nicht-Benutzer-Haltepunkt bei $00564974. Prozess NetLogTS.exe (2060)
Erste Gelegenheit für Exception bei $7C929AF2. Exception-Klasse $C0000005 mit Meldung 'access violation at 0x7c929af2: write of address 0x00000010'. Prozess NetLogTS.exe (2060)


Moderiert von user profile iconNarses: Code-Tags hinzugefügt


derkreis - Fr 18.05.12 14:52

Keiner eine Idee? Das fällt mir schwer zu glauben ...

Ich wüsste wirklich gern, wo das Problem liegt.


jaenicke - Fr 18.05.12 15:02

Wenn du dann fortsetzt, läuft die Exe dann normal? Wenn ja, wird die Exception abgefangen und behandelt. Delphi zeigt die beim Debuggen aber natürlich trotzdem an, schließlich willst du ja Fehler finden.

Um zu der Stelle debuggen zu können, binde einfach eine neue Unit ganz oben im Projektquelltext ein und schreibe in deren initialization Code, auf dem du dann per Haltepunkt anhältst. Das ist das erste, das in der Exe passiert nach der direkten Initialisierung am Einsprungspunkt. Von dort aus kannst du dann schrittweise weitergehen.


derkreis - Mo 21.05.12 13:50

Nein, weiter macht der Debugger nicht. Er läuft unendlich in den gleichen Fehler.

Bezüglich neue Unit und deren Initialisierungsteil habe ich das Problem, dass ich nicht weiß, wo der Debugger hinkommen soll (create hilft nicht, denn da ist die Exception schon da). Ich hab mal alle Units rausgenommen und nur noch die forms drin gelassen. Aber auch da kommt die Exception. Ich steh grad total auf de Schlauch!



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
uses
  Forms;
//  NetLogTSU1 in 'NetLogTSU1.pas' {Form1};

{$R *.RES}

begin
  Application.Initialize;
  Application.Title := 'NetLog';
//  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt NetLogTS.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x7c929af2: write of address 0x00000010' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------


jaenicke - Mo 21.05.12 18:19

Dann erstelle einmal ein neues Projekt und füge dem schlicht die Unit mit deinem Formular hinzu. ;-)
(Denn dann liegt es wohl an irgendwelchen Projekteinstellungen oder -ressourcen, nicht am Quelltext im Formular.)


derkreis - Di 22.05.12 11:39

Hallo,

so habe ich es gemacht. Ich hab die Projektdateien gelöscht und das Formular in ein neues Projekt eingefügt. Jetzt geht es. Es scheint ein Bug beim Konvertieren eines Delphi 2010 Projektes in XE2 zu sein.

Gruß

Ralf