Autor Beitrag
MitschL
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 211

Win 98 SE, Win 2000
D5 Pers, D6 Pers und D7 Pro
BeitragVerfasst: Do 17.02.05 12:35 
Also,

ich habe gerade eine LogFile-Unit erstellt. Die Aufrufe geschehen nach dem Motto:
ausblenden Delphi-Quelltext
1:
2:
3:
ILog( 'Info-Text' );
WLog( 'Warn-Text' );
ELog( 'Fehler-Text' );


Jetzt möchte ich gern noch Informationen des aufrufenden Ortes mit übergeben, so daß in meinem Logfile die Unit und Methode auftauchen, ohne dies explizit im Text angeben zu müssen. Wie kann ich das machen? Geht es überhaupt?

Ein Antwort würde mich erfreuen.

gegrüßt!

_________________
"Bloßes Ignorieren ist noch keine Toleranz." (Theodor Fontane)
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 17.02.05 13:08 
Ist das ganze nur für Testzwecke gedacht? Falls ja, kannst du dir was mit Assertions basteln. Sobald du die Assertions nicht mehr brauchst, kannst du dann einfach die Assertions ausschalten und sie werden automatisch nicht mehr mitkompiliert.
Was anderes fällt mir momentan nicht ein.
Gruss,
Simon

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
{$ASSERTIONS ON}
procedure MyAssertErrorProc(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer);
begin
 ShowMessage('"'+Message+'": in '+Filename+' at '+inttostr(LineNumber));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 AssertErrorProc := MyAssertErrorProc;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 assert(false,'Fehler-Text');
end;
MitschL Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 211

Win 98 SE, Win 2000
D5 Pers, D6 Pers und D7 Pro
BeitragVerfasst: Do 17.02.05 13:42 
Erstmal ein Danke,

ich hab mir das mal angeschaut und mußte leider feststellen, daß mich das Erstens nicht so ganz zufrieden stellt - Ich möchte nämlich gern den Methoden-Namen haben - und dass das Logfile auch in einer Auslieferung enthalten sein soll (Es hat eine Debug/Release-Unterscheidung), was Assertions als 'unglücklich' einstuft.

Hm. Ich bin wohl TCL- und C++-verwöhnt...

gegrüßt!

_________________
"Bloßes Ignorieren ist noch keine Toleranz." (Theodor Fontane)
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 17.02.05 14:53 
Wie gesagt, was besseres fällt mir nicht ein.
So weit ich weiss (könnte mich aber täuschen) werden nur die Namen der published-Methoden überhaupt mitgespeichert.

Gruss
opfer.der.genauigkeit
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



BeitragVerfasst: Do 17.02.05 15:48 
Meinst du z.B. eine Funktion wie ptrace (Linux- Kernel- Funktion)
mit der du den Aufrufstack zurückverfolgen kannst?

_________________
Stellen Sie sich bitte Zirkusmusik vor.
MitschL Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 211

Win 98 SE, Win 2000
D5 Pers, D6 Pers und D7 Pro
BeitragVerfasst: Do 17.02.05 16:17 
ptrace sagt mir nichts :oops:
Aufrufstack hingegen schon eher, wie komme ich da an den letzten also ersten.. ähm obersten Eintrag? Der wäre genau, was ich haben möchte.

gegrüßt!

_________________
"Bloßes Ignorieren ist noch keine Toleranz." (Theodor Fontane)
opfer.der.genauigkeit
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



BeitragVerfasst: Do 17.02.05 16:31 
Ich hab auch mal n bißchen nach einer vergleichbaren Funktion von Windows gesucht..
erfolglos bis jetzt. Hab nur das gefunden und grad keine Zeit mehr mich darum zu kümmern
StackWalk

Was du machen kannst ist dir mal im Delphi- Assemblerfenster anzusehen, wie die Aufrufe von statten gehen
und wie man so sinnvoll und allgemeingültig an den vorherigen Aufruf kommt.
Aber hier sollten sich mal die Assemblerkönner einschalten, mich würde das auch interessieren. :wink:

//Edit: Und guck mal hier support.microsoft.co...?scid=kb;en-us;92537

_________________
Stellen Sie sich bitte Zirkusmusik vor.
MitschL Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 211

Win 98 SE, Win 2000
D5 Pers, D6 Pers und D7 Pro
BeitragVerfasst: Do 17.02.05 17:22 
Erstmal: hab Dank,

ich habe mal den Artikel hinter dem Link überflogen und kam zu dem Schluß, daß ich wohl eine Prozeduren-Symbol-Liste haben/pflegen müßte.
Dann sah ich mir StackWalk an und scheiterte an einem Pointer auf den StackFrame.
Zu guter Letzt startete ich ein Programm aus der Idee, unterbrach es und sah mir das CPU-Fenster an. OK. Assembler ist bei mir 12 Jahre und einen anderen Typ Computer (c64) her.
Also: Erfolglos...

gegrüßt

_________________
"Bloßes Ignorieren ist noch keine Toleranz." (Theodor Fontane)
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 17.02.05 23:36 
Vielleicht lohnt es sich ja hier mal reinzuschauen:
www.clevercomponents...cle012/exwatcher.asp
Gruss