Как заставить компоновщик включить функцию, которая мне нужна во время отладки?
Я часто делаю небольшие методы для помощи в отладке, которые не используются в реальной программе. Обычно большинство моих классов имеют метод AsString, который я добавляю к часам. Я знаю, что Delphi 2010 имеет визуализаторы, но я все еще в 2007 году.
Рассмотрим следующий пример:
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;
type
TMyClass = class
F : integer;
function AsString : string;
end;
function TMyClass.AsString: string;
begin
Result := 'Test: '+IntToStr(F);
end;
function SomeTest(aMC : TMyClass) : boolean;
begin
//I want to be able to watch aMC.AsString while debugging this complex routine!
Result := aMC.F > 100;
end;
var
X : TMyClass;
begin
X := TMyClass.Create;
try
X.F := 100;
if SomeTest(X)
then writeln('OK')
else writeln('Fail');
finally
X.Free;
end;
readln;
end.
Если я добавлю X.AsString в качестве чата, я просто получаю "Function to be called, TMyClass.AsString, был удален компоновщиком".
Как заставить компоновщика включить его? Моя обычная трюк заключается в том, чтобы использовать метод где-то в программе, но нет ли более элегантного способа сделать это?
ОТВЕТ:
GJ обеспечил лучший способ сделать это.
initialization
exit;
TMyClass(nil).AsString;
end.
Ответы
Ответ 1
sveinbringsli спросить: "У вас есть подсказка для функций единицы также?"
Компилятор Delphi - умный...
Итак, вы можете сделать что-то вроде...
unit UnitA;
interface
{$DEFINE DEBUG}
function AsString: string;
implementation
function AsString: string;
begin
Result := 'Test: ';
end;
{$IFDEF DEBUG}
initialization
exit;
AsString;
{$ENDIF}
end.
Ответ 2
Вы можете опубликовать функцию.
TMyClass = class
F : integer;
published
function AsString : string;
end;
И включитесь в "Свойства часов" "Разрешить вызовы функций"
Ответ 3
Возможно, он работает, чтобы вызвать их в какой-либо секции инициализации, защищенной с помощью {IFDEF DEBUG} или {IFOPT D +}.