Отладка вызовов OutputDebugString в Delphi
У меня в приложении есть какой-то "мошеннический" вызов OutputDebugString, который выводит "T", но я не могу просто найти его.
Можно ли как-то установить точку останова на OutputDebugString -function и посмотреть, откуда она вызывается?
Я использую Delphi 2009.
2 ответа
Сколько звонков на OutputDebugString
есть в вашем проекте? Вы можете использовать диалог "Найти в файлах", чтобы найти их все, и если их не так много, проблем не должно быть.
В противном случае, вы могли бы - конечно - использовать поиск и заменить и заменить все OutputDebugString(
с raise Exception.Create(
,
Вы также можете написать функцию
procedure OutputDebugString(const Str: string);
begin
raise Exception.Create(Str);
end;
в единице, используемой каждой другой единицей в проекте. Если только этот новый блок объявлен после Windows.pas
в uses
список, эта новая функция будет использоваться вместо Windows.pas.
Обновить
Да, вы можете разместить точки останова в Windows.pas. Во-первых, в вашем проекте перейдите в Параметры проекта и в разделе "Отладка" выберите "Использовать отладочные DCU". Затем вы можете перейти к Windows.pas и установить точку останова в строке 30769:
procedure OutputDebugString; external kernel32 name 'OutputDebugStringW';
- Запустите ваше приложение.
- Поставь на паузу.
- Откройте окно View/Debug windows/Modules.
- Ищите kernel32.dll. Дважды щелкните по нему.
- Ищите OutputDebugStringA. Дважды щелкните по нему.
- Откроется окно процессора. Установите точку останова на самой первой строке.
- Поиск для OutputDebugStringW. Дважды щелкните по нему.
- Откроется окно процессора. Установите точку останова на самой первой строке.
Готово.
Теперь любой вызов OutputDebugString из вашего приложения будет прерываться в точке останова. Вы также можете включить ведение журнала в свойствах точки останова для регистрации стека вызовов.