Отладка TValue, содержащего строку

У меня проблемы с проверкой строкового значения переменной TValue во время отладки. В меню при наведении курсора не отображается строковое значение, и даже добавить его в список наблюдения сложно.

Учитывая очень простой пример консольного приложения, например

program Project1;

uses
  System.SysUtils, System.Rtti;

var
  Value: TValue;
begin
  Value := 'Hello';
  WriteLn(Value.AsType<string>);
  ReadLn;
end.

Добавив точку останова в строку WriteLn, я могу навести курсор на переменную Value и увидеть тип значения, но на самом деле нет никакой информации о строковом значении, см.

Переменная в отладчике

Следующее, что я попробовал, - это добавить его в список наблюдения, используя .AsType<string>, однако ошибки списка наблюдения - внутренняя ошибка в примере приложения, E2531 (метод требует явных аргументов типа) в моем реальном приложении. Нет никакой разницы, чтобы отмечать / снимать флажок, разрешающий побочные эффекты и функции. Ошибка списка просмотра

В конечном итоге сработало создание функции для преобразования, например.

function ValueToString(const Value: TValue): string;
begin
  Result := Value.AsType<string>;
end;

и используя это в списке наблюдения. Однако мне пришлось использовать эту функцию в коде приложения (например, в вызове WriteLn в примере), чтобы избежать ее удаления компоновщиком. Это также означает, что мне придется добавить эту функцию или модуль, содержащий эту функцию, в каждый модуль, который я хочу отлаживать.

Есть ли лучшее решение?


person Sebastian Proske    schedule 02.08.2017    source источник
comment
Возможно, здесь есть несколько подсказок: Простой визуализатор отладки для delphi 2010.   -  person LU RD    schedule 02.08.2017
comment
И ссылка на документы   -  person LU RD    schedule 02.08.2017
comment
@LURD, так что писать свой собственный визуализатор отладки для TValue? Я обязательно учту это, но надеюсь, что это только крайний вариант :)   -  person Sebastian Proske    schedule 02.08.2017
comment
Вы также можете попросить совета на форуме g + DelphiDevelopers.   -  person LU RD    schedule 02.08.2017


Ответы (2)


Использование встроенного Value.ToString Value.ToString работает в часах. Value.AsString тоже оценивает.

person J...    schedule 02.08.2017

Вы также можете использовать Value.AsVariant.

person Tamas    schedule 02.08.2017