我可以在VCL应用程序的控制台窗口中显示循环结果以进行调试吗?
答案 0 :(得分:28)
在Windows中,输出调试信息的最简单方法是使用OutputDebugString()
,然后使用能够接收该输出的应用程序。 Delphi IDE中的事件查看器本身能够接收该输入,或者您可以使用DebugView中的SysInternals应用程序在未安装IDE的系统上输出。 AFAIK,GExperts也有类似的工具。那是因为GUI应用程序默认情况下没有控制台在哪里写输出,否则你必须创建一个(参见Gerry的答案)。
OutputDebugString()
的一个优点是,即使调用进入发布版本(或者如果故意留在那里),应用程序也可以正常工作,但要注意不要输出敏感信息,因为可以使用上述工具之一阅读它们。
您还可以创建一个临时表单(即使用备忘录控件)并在那里路由输出。
还有一些高级日志记录工具,如SmartInspect,CodeSite和其他。
答案 1 :(得分:26)
最简单的方法是编译为控制台应用程序,但将正常的应用程序框架代码放回到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.
如果从命令行调用,此方法(通常)具有创建新控制台的缺点。从内存获取重定向到工作需要更多的代码。 优点是您可以决定在运行时分配控制台,而不是编译时。
答案 2 :(得分:9)
Delphi有一个选项,在项目的链接器选项中检查"Generate console application"。标准I / O将被定向到一个控制台窗口,该窗口将伴随您的 GUI 应用程序。然后你可以像往常一样使用Writeln
等。
Delphi程序具有标准输出 文件,如果它们作为控制台链接 应用
答案 3 :(得分:1)
如果你编写了控制台应用程序,你可以在控制台应用程序中尝试OutputDebugString函数(我没试过)。
或者您可以捕获控制台应用程序的输出,例如 Capture the output from a DOS (command/console) Window 。
此外,您还可以查看 Console Application Runner Classes 。我使用这些课程。我认为他们很棒。