Как просмотреть вывод OutputDebugString?

Я хочу использовать OutputDebugString() в своем приложении, а затем иметь возможность показывать его в отдельном средстве просмотра, когда приложение развертывается в этом поле.

То есть, я не хочу менять флаг и перестраивать свой .exe, чтобы включить и выключить отладку.

Похоже, что это выглядит как DebugView, но ни он, ни TraceTool показывает любой вывод этого кода.

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
   OutputDebugString(PChar('Hello, wurld'));
end;

end.

Я прочитал документацию, безрезультатно, и вижу, что у других были подобные проблемы, но не опубликовал решение.

Есть ли решение?

Ответ 1

GExperts имеет средство просмотра отладки и блок, который вы добавляете в свое приложение, которое сделает это за вас, даже в XE2 Starter. См. Раздел DebugIntf и приложение GExpertsDebugWindow.exe, которое оно включает. Они работают под XE2 Starter (и почти все другие версии Delphi).

GExperts также включает в себя множество других улучшений IDE и редакторов, которые великолепны, и, конечно же, они были навсегда, поэтому они довольно прочные инструменты.

Ответ 2

Инструмент DebugView отлично работает; только убедитесь, что вы запускаете приложение напрямую (без использования встроенной среды Delphi или другого отладчика).

В любом случае естественным способом просмотра вывода OutputDebugString для приложения Delphi является использование среды Delphi IDE и окна Event Log.

Enter image description here

Enter image description here

Ответ 3

CnWizards содержит инструмент CnDebugViewer.exe, который может захватывать OutputDebugString (должен запускаться как администратор в Windows 7).

Не похоже на DbgView, CnDebugViewer может создавать отдельные вкладки для разных приложений.

CnPack содержит единицу, CnDebug.pas. С помощью этого устройства вы можете трассировать типизированные объекты, коллекции, исключения, memdump и т.д. С помощью CnDebug.pas вы также можете установить, следует ли автонастраивать CnDebugViewer, отправлять ли дамп при отправке отладочных сообщений и т.д.

Ответ 4

Одна проблема с использованием OutputDebugString заключается в том, что другие программы также могут использовать ее, загромождая ваш журнал: Отладка вызовов OutputDebugString в Delphi.

Вы можете использовать CodeSite Express, который нам очень понравился в повседневном использовании: http://www.raize.com/devtools/codesite/Default.asp.

Ответ 5

В моей версии XE5 мне пришлось включить опцию "Выходные сообщения":

Инструменты > Параметры > Параметры отладчикa > Журнал событий

Я не помню, чтобы отключить его.