2012-06-27 47 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的英鎊幫助這是我將與之合作的解決方案 - FOR EXE2 STARTER版本。它似乎是在IDE內外共同工作的唯一解決方案。對於其他版本,我可能更喜歡TraceToool的更多版本,但Gexperts看起來比我的需求更好。 – Mawg

回答

9

GExperts has a調試查看器以及添加到應用程序中的單元,即使在XE2 Starter中也會爲您執行此操作。請參閱DebugIntf單元以及它包含的GExpertsDebugWindow.exe應用程序。這些工作在XE2 Starter(以及幾乎所有其他版本的Delphi)下工作。

GExperts還包括很多其他的IDE和編輯器增強功能,這些增強功能非常棒,當然它們也一直存在,所以它們是非常穩定的工具。

+0

它不能在從未安裝Delphi的PC上運行(無法找到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 IDE或其他調試器)。

無論如何,查看Delphi應用程序的OutputDebugString輸出的自然方法是使用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

我不敢相信'Event Log' Windows不屬於Delphi Starter版本的一部分:( – RRUZ

+1

但是它在matix特性中看起來如此,對嗎?我在菜單上找不到它... – Mawg

5

專家包包含一個工具,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的,我不得不啓用在「輸出消息」選項:

工具>選項>調試器選項>事件日誌

我不記得禁用它。