Есть ли такая функция, как PHP Vardump в Delphi? - PullRequest
4 голосов
/ 29 мая 2009

Я отказался от отладчика Delphi 7 и в значительной степени полагаюсь на строки outputdebugstring. Есть ли стандартная функция, которую я могу вызвать, чтобы получить содержимое объекта в виде строки, как отладчик, если бы я установил точку останова?

Ответы [ 3 ]

4 голосов
/ 29 мая 2009

Не совсем то, что вы ищете, но вы можете использовать RTTI, чтобы получить доступ к значениям различных опубликованных свойств. Волшебные процедуры в блоке TypInfo. Вероятно, вас больше всего интересуют GetPropList, который будет возвращать список свойств объектов, и GetPropValue, который позволит вам получить значения свойств.

procedure TForm1.DumpObject( YourObjectInstance : tObject );
var
  PropList: PPropList;
  PropCnt: integer;
  iX: integer;
  vValue: Variant;
  sValue: String;
begin
  PropCnt := GetPropList(YourObjectInstance,PropList);
  for iX := 0 to PropCnt-1 do
    begin
      vValue := GetPropValue(YourObjectInstance,PropList[ix].Name,True);
      sValue := VarToStr( vValue );
      Memo1.Lines.Add(PropList[ix].Name+' = '+sValue );
    end;
end;

например, запустите это с DumpObject (Self) по нажатию кнопки основной формы, и он сбросит все свойства текущей формы в заметку. Это только опубликованные свойства и требует, чтобы основной класс либо происходил из TPersistent, либо OR был скомпилирован с включенным {$ M +} перед объектом.

Ходят слухи, что подобная способность "отражатель" будет доступна в будущей версии Delphi (возможно, 2010).

3 голосов
/ 29 мая 2009

Рассмотрим что-то вроде Codesite , которое является гораздо более полным решением для отслеживания. Это позволяет выводить гораздо более сложную информацию, а затем искать, распечатывать и анализировать данные. Но для ваших целей вы можете просто отправить ему объект с помощью Codesite.Send («До», self); и вы получите все доступные свойства RTTI в журнале. Сделайте «После» тоже, и затем вы можете сравнить два в выводе Codesite, просто выбрав оба. Это спасло меня много раз.

0 голосов
/ 29 мая 2009

если delphi 7 - версия .NET, то вы можете сделать это (с некоторыми) с помощью отражения. (не легко, но не очень сложно). если это обычная, скомпилированная вещь, то это сложная проблема, и отладчик - лучший выбор, кроме специализированных функций / методов печати. ​​

...