Entwickler-Ecke

Programmierwerkzeuge - Bei Windows-Anwendung Text in Konsole ausgeben ...


seppl42 - Fr 20.04.12 14:56
Titel: Bei Windows-Anwendung Text in Konsole ausgeben ...
Hallo,

ich bin neu in Delphi und ich bin es von Eclipse (Java) gewohnt, dass ich auch bei einer Fenster-Applikation auf die Konsole schreiben kann. Gibt es in Delphi eine Möglichkeit dafür?

Falls ihr wissen wollt, für was ich das brauche: Oft hat man das Problem, dass man beim Debuggen eine Schleife x-mal durchlaufen muss, um an den Wert, den man sehen will, zu kommen. In Eclipse löse ich dieses Problem so, dass ich an der entsprechenden Stelle ein println(wert) mache und ich sehe wie oft die Schleife durchlaufen wird und wie sich der Wert dabei ändert. Wenn ich das gesehen habe, lösche ich den Befehl wieder.

Es wäre schön, wenn ich das in Delphi auch irgendwie machen könnte, denn Writeln geht nur bei Konsolenanwendungen. Ich habe mir schon überlegt, in ein File zu schreiben, aber das müsste man jedes Mal neu anlegen und das wäre fast zu viel Aufwand ...

Kennt irgendjemand eine Funktion mit der ich das machen könnte?

lg
seppl42


glotzer - Fr 20.04.12 15:01

Hallo und :welcome:


Delphi-Quelltext
1:
2:
3:
4:
procedure DebugMsg(const Msg: String);
begin
    OutputDebugString(PChar(Msg))
end;


denk das sollte sein was du suchst.


jasocul - Fr 20.04.12 15:18

Du kannst auch einen Haltepunkt setzen und eine Bedingung einstellen, bei welchem Durchlauf der Debugger dort anhalten soll. Dann kannst du dir in Ruhe alle Werte ansehen.


Andreas L. - Fr 20.04.12 15:56

Du kannst in der Projektdatei (dpr) {$APPTYPE CONSOLE} unter program xyz; schreiben. So kannst du im ganzen Programm Writeln wie in einer Konsolen-Anwendung verwenden. Allerdings öffnet sich so immer ein Konsolenfenster zusaätzlich zur VCL-GUI. Wenn du das Writeln nur zum debuggen brauchst kannst du auch mit IfDef arbeiten damit das Konsolenfenster in der Release-Anwendung nicht erscheint:


Delphi-Quelltext
1:
2:
3:
4:
program Project3;
{$IFDEF DEBUG}
  {$APPTYPE CONSOLE}
{$ENDIF}


bummi - Fr 20.04.12 16:03

Have fun ... ;-)


Delphi-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:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    procedure DebugOut(const s: String);
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    FHasConsole:Boolean;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
  I: Integer;
begin
   for I := 1 to 100 do
      begin
        Caption := IntToStr(i);
        DebugOut('Schleife an Stelle '+ IntToStr(i))
      end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  FHasConsole := Windows.AllocConsole;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
   if FHasConsole then FreeConsole;

end;

Procedure TForm2.DebugOut(Const s:String);
begin
  if FHasConsole then Writeln(s);
end;

end.


jaenicke - Fr 20.04.12 16:05

user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Du kannst auch einen Haltepunkt setzen und eine Bedingung einstellen, bei welchem Durchlauf der Debugger dort anhalten soll. Dann kannst du dir in Ruhe alle Werte ansehen.
Nicht nur das, man kann auch in den Eigenschaften des Haltepunkts das Häkchen bei Anhalten wegnehmen und einen Ausdruck angeben, dessen Wert beim Erreichen des Haltepunkts ausgegeben werden soll.
Auf diese Weise bekommt man die Werte ohne Code zu schreiben. ;-)

Zu sehen ist das dann wie bei OutputDebugString im Ereignisfenster beim Debuggen.

Eine Konsolenausgabe zu machen ist hingegen für den Zweck wenig sinnvoll. ;-)