web-dev-qa-db-fra.com

Comment puis-je écrire dans la fenêtre de la console pour le débogage?

Puis-je afficher le résultat d'une boucle dans la fenêtre de la console dans une application VCL à des fins de débogage?

27
emurad

Sous Windows, le moyen le plus simple de générer des informations de débogage consiste à utiliser OutputDebugString(), puis à utiliser une application capable de recevoir cette sortie. L'observateur d'événements dans Delphi IDE lui-même est capable de recevoir cette entrée, ou vous pouvez utiliser l'application DebugView de SysInternals pour obtenir la sortie sur un système qui n'a pas le IDE installé. AFAIK, GExperts a aussi un outil similaire. C'est parce qu'une application GUI n'a pas par défaut une console où écrire la sortie, sinon vous devez créer un (voir la réponse de Gerry).

L'un des avantages de OutputDebugString() est que l'application fonctionnera sans problème même si un appel se glisse dans une version (ou est laissé là intentionnellement), mais attention à ne pas sortir d'informations sensibles, car elles peuvent être lire en utilisant l'un des outils ci-dessus.

Vous pouvez également créer un formulaire ad hoc (c'est-à-dire avec un contrôle mémo) et y acheminer la sortie.

Il existe également des fonctionnalités de journalisation avancées telles que SmartInspect , CodeSite et d'autres.

30
user160694

La manière la plus simple est de compiler en tant qu'application console, mais de remettre le code de cadre d'application normal dans le 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.

Une manière légèrement plus complexe consiste à utiliser l'appel AllocConsole de l'API Windows:

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.

Cette méthode a l'inconvénient (généralement) de créer une nouvelle console si vous appelez à partir de la ligne de commande. De la mémoire, la redirection au travail nécessite également un peu plus de code. avantage est que vous pouvez décider d'allouer la console au moment de l'exécution, plutôt qu'au moment de la compilation.

27
Gerry Coll

Delphi a une option pour cela, vérifiez "" Générer l'application console " dans les options de l'éditeur de liens pour le projet. Les E/S standard seront dirigées vers une fenêtre de console qui accompagnera votre [~ # ~] gui [~ # ~] application. Ensuite, vous pouvez utiliser Writeln etc. comme vous le feriez normalement.

Lisez Sortie (ou Entrée ) à partir des documents:

Les programmes Delphi ont un fichier de sortie standard s'ils sont liés en tant qu'applications de console.

10
Sertac Akyuz

Si vous avez écrit l'application console, vous pouvez essayer la fonction OutputDebugString dans l'application console (je n'ai pas essayé).

Ou vous pouvez capturer la sortie de l'application console comme dans capturer la sortie d'une fenêtre DOS (commande/console).

Vous pouvez également vérifier Classes Runner d'application console. J'utilise ces cours. Je crois qu'ils sont super.

1
SimaWB