【发布时间】:2011-05-24 04:35:22
【问题描述】:
我可以在VCL 应用程序的控制台窗口中显示循环结果以进行调试吗?
【问题讨论】:
我可以在VCL 应用程序的控制台窗口中显示循环结果以进行调试吗?
【问题讨论】:
最简单的方法是编译为控制台应用程序,但将正常的应用程序框架代码放回dpr中。
program Project2;
{$APPTYPE CONSOLE}
uses
Forms,
SysUtils,
Unit1 in 'Unit1.pas' {Form1};
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
writeln('Hello, World!');
Application.Run;
end.
稍微复杂一点的方法是使用 Windows API AllocConsole 调用:
program Project2;
uses
Forms,
SysUtils,
Windows,
Unit1 in 'Unit1.pas' {Form1};
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
AllocConsole;
writeln('Hello, World!');
Application.Run;
end.
如果您从命令行调用,此方法(通常)具有创建新控制台的缺点。从内存重定向到工作也需要更多代码。 优点是您可以决定在运行时而不是编译时分配控制台。
【讨论】:
在 Windows 中,输出调试信息的最简单方法是使用OutputDebugString(),然后使用能够接收该输出的应用程序。 Delphi IDE 本身中的事件查看器能够接收该输入,或者您可以使用来自SysInternals 的DebugView 应用程序在没有安装IDE 的系统上获取输出。 AFAIK,GExperts 也有类似的工具。这是因为 GUI 应用程序默认情况下没有用于写入输出的控制台,否则您必须创建一个控制台(请参阅 Gerry 的回答)。
OutputDebugString() 的优点之一是即使调用滑入发布版本(或者如果故意留在那里),应用程序也可以正常运行,但请注意不要输出敏感信息,因为它们可以使用上述工具之一阅读。
您还可以创建一个临时表单(即带有备忘录控件)并在那里路由输出。
还有先进的日志记录工具,如SmartInspect、CodeSite 等。
【讨论】:
Delphi 有一个选项,在项目的链接器选项中检查"Generate console application"。标准 I/O 将被定向到伴随您的 GUI 应用程序的控制台窗口。然后你可以像往常一样使用Writeln等。
Delphi 程序有标准输出 文件,如果它们被链接为控制台 应用程序。
【讨论】:
如果你写了控制台应用,可以试试控制台应用中的OutputDebugString函数(我没试过)。
或者您可以捕获控制台应用程序的输出,例如 Capture the output from a DOS (command/console) Window 。
另外,您可以查看Console Application Runner Classes。我使用这些类。我觉得他们很棒。
【讨论】: