Ile wzywa do OutputDebugString
istnieją w projekcie? Możesz użyć okna "Znajdź w plikach", aby znaleźć je wszystkie, a jeśli nie jest ich zbyt wiele, nie powinno być problemu.
W przeciwnym razie możesz - oczywiście - użyć wyszukiwania i zastąpić wszystkie OutputDebugString(
za pomocą raise Exception.Create(
.
Można również napisać funkcję
procedure OutputDebugString(const Str: string);
begin
raise Exception.Create(Str);
end;
w jednostce używanej przez każdą inną jednostką w projekcie. Jeśli tylko ta nowa jednostka zostanie zadeklarowana po Windows.pas
na liście uses
, ta nowa funkcja zostanie użyta zamiast tej z Windows.
Aktualizacja
Tak, można umieścić punkty przerwania wewnątrz Windows.pas. Najpierw w projekcie przejdź do Opcje projektu, aw obszarze Debugowanie wybierz "Użyj debugujących modułów DCU". Następnie można przejść do Windows.pas i umieścić punkt przerwania na linii 30769:
procedure OutputDebugString; external kernel32 name 'OutputDebugStringW';
Zbyt wiele elementów projektu i komponentów. Nie jestem nawet pewien, czy wiadomość pochodzi z kodu własnego czy zewnętrznego. – Harriv
Tak, debugowanie DCU to robi. Teraz po prostu muszę dowiedzieć się, jak ustawić warunek .. – Harriv
jeśli to nie twój kod, ale jakaś jednostka, której używasz (pośrednio) to połączenie może również przejść do OutputDebugStringA. – Remko