2010-11-23 81 views
5

我的應用程序中有一些「流氓」OutputDebugString調用打印出「T」,但我不能找到它。調試Delphi中的OutputDebugString調用

是否有可能以某種方式設置的OutputDebugString - 函數斷點,看看它是從哪裏叫什麼名字?

我使用德爾福2009年

回答

13

在您的項目多少個電話給OutputDebugString有哪些?您可以使用「在文件中查找」對話框來查找它們全部,如果它們不是太多,就不會有問題。

否則,您可以 - 當然 - 使用搜索並替換並替換所有OutputDebugString(raise Exception.Create(

你也可以在項目中使用的所有其他單位的單位寫一個函數

procedure OutputDebugString(const Str: string); 
begin 
    raise Exception.Create(Str); 
end; 

。如果僅在uses列表中的Windows.pas之後聲明瞭此新單元,則將使用此新函數代替Windows.pas。

更新

是的,您可以在Windows.pas中放置斷點。首先,在您的項目中,轉到項目選項,然後在調試下,選擇「使用調試DCU」。然後你可以去Windows.pas並放置一個斷點行30769:

procedure OutputDebugString; external kernel32 name 'OutputDebugStringW'; 
+1

太多的項目和組件分佈..我甚至不知道該消息是來自自己的還是第三方代碼。 – Harriv 2010-11-23 17:32:12

7
  • 運行應用程序。
  • 暫停。
  • 打開視圖/調試窗口/模塊 窗口。
  • 搜索kernel32.dll。雙擊它。
  • 搜索OutputDebugStringA。雙 點擊它。
  • CPU窗口打開。在第一行設置斷點 。
  • 搜索OutputDebugStringW。雙 點擊它。
  • CPU窗口打開。在第一行設置斷點 。

完成。

現在,任何來自應用程序的OutputDebugString調用都將在斷點處中斷。您還可以打開記錄斷點屬性以記錄調用堆棧。