Отладка вызовов 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 из вашего приложения будет прерываться в точке останова. Вы также можете включить ведение журнала в свойствах точки останова для регистрации стека вызовов.

Другие вопросы по тегам