29

デバッグの目的で、ループの結果をVCLアプリケーションのコンソールウィンドウに表示できますか?

4

4 に答える 4

33

最も簡単な方法は、コンソール アプリケーションとしてコンパイルすることですが、通常のアプリケーション フレームワーク コードを 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.

コマンドラインから呼び出している場合、この方法には (通常) 新しいコンソールを作成するという欠点があります。メモリからリダイレクトを機能させるには、さらにコードが必要です。利点は、コンパイル時ではなく、実行時にコンソールを割り当てることを決定できることです。

于 2010-12-12T10:21:54.130 に答える
32

Windows でデバッグ情報を出力する最も簡単な方法は、OutputDebugString()その出力を受信できるアプリケーションを使用してから使用することです。Delphi IDE 自体のイベント ビューアはその入力を受け取ることができます。また、SysInternals の DebugView アプリケーションを使用し IDEがインストールされていないシステムで出力を取得することもできます。私の知る限り、GExpertsにも同様のツールがあります。これは、GUI アプリケーションにはデフォルトで出力を書き込むコンソールがないためです。それ以外の場合は作成する必要があります (Gerry の回答を参照)。

の利点の1 つはOutputDebugString()、呼び出しがリリース ビルドに紛れても (または意図的にそこに残されていても)、アプリケーションが問題なく動作することですが、機密情報を出力しないように注意してください。上記のツール。

アドホック フォーム (つまり、メモ コントロールを使用) を作成し、そこに出力をルーティングすることもできます。

SmartInspectCodeSiteなどの高度なログ機能もあります。

于 2010-12-12T13:22:46.453 に答える
13

Delphi には、このためのオプションがあります。プロジェクトのリンカ オプションで「コンソール アプリケーションの生成」をチェックしてください。標準 I/O は、 GUIアプリケーションに付随するコンソール ウィンドウに送られます。その後Writeln、通常どおり etc. を使用できます。

ドキュメントからOutput (またはInput )を読み取ります。

コンソール アプリケーションとしてリンクされている場合、Delphi プログラムには標準出力ファイルがあります。

于 2010-12-12T11:01:22.787 に答える
1

コンソールアプリケーションを作成した場合は、コンソールアプリケーションでOutputDebugString関数を試すことができます(私は試しませんでした)。

または、DOS(コマンド/コンソール)ウィンドウからの出力のキャプチャのように、コンソールアプリケーションの出力をキャプチャすることもできます。

また、コンソールアプリケーションランナークラスを確認することもできます。私はこれらのクラスを使用します。彼らは素晴らしいと思います。

于 2010-12-12T10:30:19.027 に答える