2012-06-27 3 views
11

Я хочу использовать 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. 

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

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

+3

[GExperts] (http://gexperts.org) имеет средство просмотра отладки и блок, который вы добавляете в свое приложение, которое сделает это за вас, даже в стартере XE2.См. Подраздел «DebugIntf» и приложение «GExpertsDebugWindow.exe», которое оно включает. Они работают под XE2 Starter (и почти все другие версии Delphi). –

+0

+1 Я просмотрю http://www.gexperts.org/tour/index.html?debug_window.html – Mawg

+0

Если вы разместили это как ответ, я бы, вероятно, наградил его, несмотря на беспроигрышную помощь от @RRUZ. Это решение, с которым я буду работать - для выпуска EXE2 STARTER. Это единственное решение, которое работает как в среде, так и вне ее. Для других изданий я бы предпочел greate roptions из TraceToool, но Gexperts выглядит более чем хорошо для моих нужд. – Mawg

ответ

9

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

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

+0

Он не запускается на ПК, на котором никогда не было установлен Delphi (не удается найти RTL60.BPL). Я отправил в список рассылки GExperts, но mfar не ответил. – Mawg

+0

Он построен с пакетами времени выполнения. Если номер версии в BPL, который вы даете, не является опечаткой (я думаю, что это должно быть 160, а не 60), у вас установлена ​​очень ранняя версия (60 - около Delphi 6, IIRC). Если это 160, вы можете найти это в своей папке Windows \ System32 и поместить его в ту же папку, в которой вы выполняете исполняемый файл отладки. Это одна из дистрибутивных библиотек времени исполнения Delphi, поэтому вам разрешено отправлять ее с помощью приложения. Вам понадобятся VCL160 и VCLX160. –

+1

К сожалению, это было действительно 160, а не 60. Я уже скопировал эту BPL, но не знал, чтобы скопировать двух других. Это хорошо работает. Спасибо, как всегда, за вашу отличную помощь. – Mawg

23

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

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

Enter image description here

Enter image description here

+1

+1 вы можете подтвердить, что версия стартера XE2 не имеет средства просмотра событий? http://www.embarcadero.com/products/delphi/delphi-feature-matrix, похоже, указывает на это. Предположительно, тогда я не могу просмотреть свой вывод из IDE, но только когда я запускаю его автономно? – Mawg

+4

Я не могу поверить, что Windows «Журнал событий» не является частью версии Delphi Starter :( – RRUZ

+1

Но это выглядит так в матике, верно? И я не могу найти ее в меню ... – Mawg

5

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

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

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

+1

+1 Дополнительная информация на http://www.cnpack.org/showdetail.php?id=715&lang=en – Mawg

+0

@shenloqi, Хм ... кто-нибудь проверил исходный код *** чистый ***? Обычно я не доверяю таким инструментам из Китая. – Pacerier

4

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

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

+1

Это проблема только в том случае, если вы используете инструмент, который намеренно собирает сообщения из других программ, а затем не дает возможности фильтровать их. У обычных старых отладчиков эта проблема не будет, потому что 'OutputDebugString' обычно отправляет сообщения только одной отладке.Средство SysInternals использует другую, нестандартную технику для сбора сообщений, не становясь отладчиком для всех процессов. Но это также позволяет фильтровать. Так что проблем действительно нет. –

+1

Код Сайт не выглядит бесплатным :-( – Mawg

+0

CS Express включен в XE2 и XE3. Я использую полную версию в течение многих лет, отличный инструмент, гораздо более полезный, чем может показаться на первый взгляд. – casterle

2

В моей версии xe5, я должен был включить опцию «Output Messages» под:

Сервис> Параметры> Параметры Debugger> Журнал событий

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