我的应用程序中有一些“流氓”OutputDebugString调用,它们打印出“T”,但我无法定位到它们。
是否有可能在OutputDebugString函数上设置断点,并查看它是从哪里调用的?
我正在使用Delphi 2009。
我的应用程序中有一些“流氓”OutputDebugString调用,它们打印出“T”,但我无法定位到它们。
是否有可能在OutputDebugString函数上设置断点,并查看它是从哪里调用的?
我正在使用Delphi 2009。
你的项目中调用了多少次OutputDebugString
?您可以使用“在文件中查找”对话框查找它们,如果它们不太多,那么应该没有问题。
否则,您当然可以使用搜索和替换并将所有OutputDebugString(
替换为raise Exception.Create(
。
您还可以编写一个函数。
procedure OutputDebugString(const Str: string);
begin
raise Exception.Create(Str);
end;
在项目中,每个其他单位使用的单位中使用的一个单位。如果只有在uses
列表中声明了这个新单位,并且它是在Windows.pas
之后声明的,那么这个新函数将代替Windows.pas
中的函数。
是的,你可以在Windows.pas
中放置断点。首先,在你的项目中,进入项目选项,在调试下面,选择“使用调试DCUs”。然后你就可以去Windows.pas
中,在第30769行设置断点:
procedure OutputDebugString; external kernel32 name 'OutputDebugStringW';
完成。
现在,您的应用程序中的任何对 OutputDebugString 的调用都会在断点处中断。您还可以在断点属性中打开日志记录以记录调用堆栈。