web-dev-qa-db-ja.com

デバッグのためにコンソールウィンドウに書き込む方法を教えてください。

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

27
emurad

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

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

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

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

30
user160694

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

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

27
Gerry Coll

Delphiにはこのオプションがあります。プロジェクトのリンカーオプションで "コンソールアプリケーションの生成" を確認してください。標準I/Oは、[〜#〜] gui [〜#〜]アプリケーションに付属するコンソールウィンドウに送信されます。次に、通常どおり Writeln などを使用できます。

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

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

10
Sertac Akyuz

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

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

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

1
SimaWB