Как заставить компоновщик включить функцию, которая мне нужна во время отладки? - PullRequest
12 голосов
/ 22 октября 2009

Я часто использую небольшие методы для отладки, которые не используются в реальной программе. Обычно у большинства моих классов есть метод 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 как часы, я просто получаю «Функция для вызова, TMyClass.AsString, была удалена компоновщиком».

Как заставить компоновщик включить его? Мой обычный трюк - использовать метод где-то в программе, но разве нет более элегантного способа сделать это?

ОТВЕТ: GJ предоставил лучший способ сделать это.

initialization
  exit;
  TMyClass(nil).AsString;

end.

Ответы [ 3 ]

6 голосов
/ 22 октября 2009

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.
6 голосов
/ 22 октября 2009

Вы можете сделать функцию опубликованной.

  TMyClass = class
    F : integer;
  published
    function AsString : string;
  end;

И включить в «Свойствах просмотра» «Разрешить вызовы функций»

0 голосов
/ 22 октября 2009

Возможно, это работает для вызова их в каком-то разделе инициализации, защищенном {IFDEF DEBUG} или {IFOPT D +}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...