我在我的应用程序中有一些“流氓”的OutputDebugString调用,它打印出"T",但我不能只是定位它。
有没有可能以某种方式在OutputDebugString -function上设置断点并查看它是从哪里调用的?
我使用的是Delphi 2009。
发布于 2010-11-24 01:29:21
您的项目中有多少对OutputDebugString的调用?您可以使用"Find in Files“对话框来查找所有这些文件,如果它们不是太多,应该不会有问题。
否则,您当然可以使用搜索来替换所有的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';发布于 2010-11-27 11:23:28
好了。
现在,从应用程序对OutputDebugString的任何调用都将在断点处中断。您还可以在断点属性中打开日志记录,以记录调用堆栈。
https://stackoverflow.com/questions/4258848
复制相似问题