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); public 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
jasocul hat folgendes geschrieben : |
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. ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!