Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   OutputDebugString (https://www.delphipraxis.net/50642-outputdebugstring.html)

Luckie 28. Jul 2005 22:54


OutputDebugString
 
Ich beziege mich mal hier auf diesen Beitrag in der Code-Lib: http://www.delphipraxis.net/internal...?p=51157#51157

Kann es sein, dass es dieses Feature in den Personal Versionen nicht gibt? Zu mindest passiert niochts, wenn ich Strg+Alt+V drücke und ein Eventlog finde ich im Menü 'Ansicht' auch nicht. :gruebel:

Olli 28. Jul 2005 22:57

Re: OutputDebugString
 
Dann benutze alternativ DbgView von www.sysinternals.com

Ich nehme mal an, daß du dich auf Motzis Beitrag bezogst?

Luckie 28. Jul 2005 22:57

Re: OutputDebugString
 
Jupp. Danke für den Tipp.

SirThornberry 28. Jul 2005 22:57

Re: OutputDebugString
 
in der personal von D2005 ist es bei mir auch nicht drin, in der Enterprise von D7 aber schon

Daniel G 28. Jul 2005 23:02

Re: OutputDebugString
 
In der Delphi 5 Pro auch... lustig, ist mir noch gar nicht aufgefallen.

//Edit: Debug View is' wirklich nicht schlecht....


OT:
Zitat:

Zitat von Luckie
Ich beziege mich

Wenn du das machst, fang ich an zu gackern! :mrgreen:
Sorry, aber das ist wirklich ein toller Rechtschreibfehler :thumb:

Luckie 28. Jul 2005 23:09

Re: OutputDebugString
 
DebugView funktioniert irgendwie nicht. Das kan SirThornberry bestätigen. Oder muss man da noch was einstellen? Mit OliDebug habe ich die Strings gesehen.

Olli 28. Jul 2005 23:17

Re: OutputDebugString
 
Zitat:

Zitat von Luckie
DebugView funktioniert irgendwie nicht. Das kan SirThornberry bestätigen. Oder muss man da noch was einstellen? Mit OliDebug habe ich die Strings gesehen.

Mooooment, welche Funktion wird denn nun benutzt um die Debugstrings auszugeben?

Hast du unter Capture alles korrekt eingestellt?

Luckie 28. Jul 2005 23:20

Re: OutputDebugString
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  OutputDebugString('test');
end;
Und eingestllt habe ich es so, wie es in der Hilfe steht, bzw. wie es voreingestellt ist. Also 'Capture Win32', 'Capture Kernel', 'Capture Pass-Through', 'Capture Events'.

Olli 28. Jul 2005 23:21

Re: OutputDebugString
 
Zitat:

Zitat von Luckie
Und eingestllt habe ich es so, wie es in der Hilfe steht, bzw. wie es voreingestellt ist. Also 'Capture Win32', 'Capture Kernel', 'Capture Pass-Through', 'Capture Events'.

Komisch, dann kann ich es leider nicht nachvollziehen :gruebel:

Luckie 28. Jul 2005 23:24

Re: OutputDebugString
 
Habs. Ich arbeite gewöhnlich asl einfacher Benutzer an meinem Rechner. DebugView muss man aber als Administrator starten. Debuge ich jetzt die Anwendung, mus sman sie auch unter dem gleichen Konto starten.

Gut, somit hat sich das für mich erledigt. Dann werde ich bei der Konsole bleiben.

Olli 28. Jul 2005 23:27

Re: OutputDebugString
 
Zitat:

Zitat von Luckie
Habs. Ich arbeite gewöhnlich asl einfacher Benutzer an meinem Rechner. DebugView muss man aber als Administrator starten. Debuge ich jetzt die Anwendung, mus sman sie auch unter dem gleichen Konto starten.

Eigenartig, vielleicht solltest du es dann über eine eigene Anwendung lösen, die als Debugger agiert.

Alternativ gibt es einen Mutex ("DBWIN") und ein entsprechendes MMF, welches den String bekommt. Also das könntest du entsprechend auslesen. Ein Event gab's IMO auch.

Daniel G 28. Jul 2005 23:30

Re: OutputDebugString
 
Ich weiß, die Frage klingt ziemlich bescheuert....

Ist es eigentlich normal, dass Debug View mein Programm nicht "captured", wenn ich es direkt aus der IDE starte?

shmia 29. Jul 2005 09:24

Re: OutputDebugString
 
Zitat:

Zitat von Daniel G
Ist es eigentlich normal, dass Debug View mein Programm nicht "captured", wenn ich es direkt aus der IDE starte?

Ist mir auch schon aufgefallen. Der Grund wird wohl sein, dass schon die Delphi IDE die Daten "captured".
Könnte sein, dass DebugActiveProcess innerhalb von DebugView fehlschlägt.

Olli 29. Jul 2005 10:02

Re: OutputDebugString
 
Zitat:

Zitat von shmia
Ist mir auch schon aufgefallen. Der Grund wird wohl sein, dass schon die Delphi IDE die Daten "captured".
Könnte sein, dass DebugActiveProcess innerhalb von DebugView fehlschlägt.

Nein, hat nix mit dieser Funktion zu tun, sondern vielmehr damit, wie OutputDebugString arbeitet. Wenn der aktuelle Prozess nämlich in einem Debugger läuft, dann wird eine Exception ausgelöst und der Debugger bekommt dank dieser Exception den String (den muß er glaube ich noch auslesen). Wenn der Prozess ohne Debugger läuft, geht alles an den - nennen wir es mal - "Kerneldebugger von Windows".

MaBuSE 29. Jul 2005 10:31

Re: OutputDebugString
 
Zitat:

Zitat von Luckie
Ich beziege mich mal hier auf diesen Beitrag in der Code-Lib: http://www.delphipraxis.net/internal...?p=51157#51157

Kann es sein, dass es dieses Feature in den Personal Versionen nicht gibt? Zu mindest passiert niochts, wenn ich Strg+Alt+V drücke und ein Eventlog finde ich im Menü 'Ansicht' auch nicht. :gruebel:

Ich zitiere mich mal aus dem Tutorial: Debugging in Delphi für Anfänger und Fortgeschrittene

Zitat:

...
Ereignisprotokoll [Strg + Alt + V]
Zeigt das Fenster mit dem Ereignisprotokoll an.
Das Ereignisprotokoll zeigt Prozessbotschaften, Haltepunktbotschaften, OutputDebugString-Botschaften und Fensterbotschaften an. Wenn Du mit der rechten Maustaste auf diese Registerkarte klickst, wird ein Kontextmenü angezeigt, mit dessen Optionen das Ereignisprotokoll gelöscht, in einer Textdatei gespeichert, Kommentare hinzugefügt und Optionen für das Ereignisprotokoll festgelegt werden können
...
OutputDebugString
Mit dieser API Funktion (kernel32.dll) wird beim Debuggen ein Eintrag in das Ereignisprotokoll (s.o.) geschrieben.
Delphi-Quellcode:
procedure OutputDebugString(lpOutputString: PChar); stdcall;
Es ist also eine einfache Möglichkeit Informationen auszugeben, ohne Messageboxen zu benutzen.
Delphi-Quellcode:
OutputDebugString('Test');
Aber wenn OutputDebugString auch in der "Endbenutzerversion" verwendet wird, solltest Du wissen, dass das keine Delphi Funktion ist, sondern ein API Aufruf.
Wenn die Applikation nicht in einem Debugger läuft, werden diese Informationen an den Systemdebugger weitergereicht. Wenn der Systemdebugger nicht aktiv ist, geschieht nichts.
Aber wer möchte schon, dass ein "Fremder" sein Programm debuggt?
...
Das ist der Grund, warum Tools von z.B. Sysinternals auf diese Infos zugreifen können.

Und Nein, man braucht keine Admin Rechte.
Nur das Recht zum Debuggen.

[equote="MSDN - http://www.microsoft.com/technet/arc.../debugtun.mspx "]The first thing to do is to make sure that whatever interactive account you are logged on under has the SE_DEBUG_NAME (debug programs) right. All members of the local Administrators group have this privilege. If you're developing a service, you're probably a member of Administrators already, but you should keep this point in mind if you need to debug a service running on a remote machine.[/equote]

Links:
http://msdn.microsoft.com/library/de...ebugstring.asp

Luckie 29. Jul 2005 10:36

Re: OutputDebugString
 
Zitat:

Zitat von MaBuSE
Und Nein, man braucht keine Admin Rechte.
Nur das Recht zum Debuggen.

Stimmt, bei mir hat diese aber nur der Administartor. Ich sollte sie mir wohl auch mal geben. ;)

Olli 29. Jul 2005 11:21

Re: OutputDebugString
 
Zitat:

Zitat von Luckie
Stimmt, bei mir hat diese aber nur der Administartor. Ich sollte sie mir wohl auch mal geben. ;)

Allerdings, denn auch Delphis Debugger kommt um diese Beschränkungen normalerweise nicht herum.

@MaBuSE: Wenn du auch "in Tutorials" machst, willst du vielleicht bei de-delphi mitmachen? Wir haben vor durch gemeinsame Arbeit einige deutschsprachige Tutorials herauszubringen. An Korrekturlesern mangelt's nicht, aber an Autoren ;) - wenn Interesse, dann bitte PN an mich.

Gruß,


Alle Zeitangaben in WEZ +1. Es ist jetzt 05: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