我可以在VCL应用程序的控制台窗口中显示循环结果以进行调试吗?
4 回答
最简单的方法是编译为控制台应用程序,但将正常的应用程序框架代码放回 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 有一个选项,在项目的链接器选项中选中“生成控制台应用程序”。标准 I/O 将被定向到一个控制台窗口,该窗口将伴随您的GUI应用程序。然后你可以Writeln
像往常一样使用等。
如果 Delphi 程序作为控制台应用程序链接,则它们具有标准输出文件。
如果你写了控制台应用程序,你可以在控制台应用程序中尝试OutputDebugString函数(我没有尝试)。
或者您可以捕获控制台应用程序的输出,如捕获来自 DOS(命令/控制台)窗口的输出。
此外,您可以检查Console Application Runner Classes。我使用这些类。我认为他们很棒。