Autor Beitrag
seppl42
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Fr 20.04.12 14:56 
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Fr 20.04.12 15:01 
Hallo und :welcome:

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


denk das sollte sein was du suchst.

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
program Project3;
{$IFDEF DEBUG}
  {$APPTYPE CONSOLE}
{$ENDIF}
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Fr 20.04.12 16:03 
Have fun ... ;-)

ausblenden volle Höhe 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.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. ;-)