У меня проблемы с проверкой строкового значения переменной 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
в примере), чтобы избежать ее удаления компоновщиком. Это также означает, что мне придется добавить эту функцию или модуль, содержащий эту функцию, в каждый модуль, который я хочу отлаживать.
Есть ли лучшее решение?
TValue
? Я обязательно учту это, но надеюсь, что это только крайний вариант :) - person Sebastian Proske   schedule 02.08.2017