Я пытаюсь увидеть значение переменной, но отладчик показывает мне значение «????». Похоже, это происходит с переменными Currency, но не с другими типами (допустимы двойные и перечислимые типы).
Я отлаживаюсь в Windows XP SP 3 с использованием Delphi 10 Update 2.
Процесс, который я использую:
- Сборка проекта в BDS IDE.
- Скопируйте exe-файл в каталог, где ожидается использование службы.
- Запустить сервис. Это работает локально, я не пытаюсь удаленной отладки.
- Присоединить к процессу обслуживания (Выполнить | Присоединить к процессу).
- Процесс останавливается на моих точках останова, поэтому присоединение, кажется, в порядке.
- Оценить значение переменной.
Чтобы оценить переменную, которую я пробовал:
- Наведите указатель мыши на имя переменной. Обычно это отображает значение, но в этом случае ничего не отображается (т.е. без всплывающего окна).
- Щелкните правой кнопкой мыши имя переменной, Debug, Evaluate / Modify покажет значение
????
.
- Щелкните правой кнопкой мыши имя переменной, Debug, Add Watch at Cursor показывает значение
????
.
- В окне Local Variables отображается значение
{
.
Похоже, что это связано с Currency, поэтому я попытался изменить тип переменной с Currency на Double, и при повторном запуске теста отладчик показал правильное значение.
Переменные, которые я пытаюсь оценить - это локальная переменная, которая не делает ничего сложного, например ::
function FooBar: Boolean;
var
foo: Currency;
bar: Double;
begin
foo := 0; // Breakpoint next line, evaluate foo shows "????"
bar := 0; // Breakpoint next line, evaluate bar shows "0"
...
end;
Варианты проекта, которые, я думаю, могут быть актуальны:
Compiler
Code Generation
Optimization = Off
Stack frames = Off
Pentium-safe FDIV = Off
Syntax options
Strict var-strings = On
Complete boolean eval = Off
Extended syntax = On
Typed @ operator = Off
Open parameters = On
Huge strings = On
Assignable typed constants = Off
Runtime Errors
Range Checking = On
I/O Checking = On
Overflow Checking = On
Debugging
Debug Information = On
Local Symbols = On
Debug Info = On
Definitions Only = On
Assertions = On
Use Debug DCUs = Off
Linker
Map file = Detailed
Linker output = Generate DCUs
Exe and DLL options
Include TD32 debug info = On
Include remote debug symbols = On
Кто-нибудь может подсказать, что вызывает это и как я могу заставить его работать?
Edit:
Я попробовал тестовую программу, состоящую из формы с кнопкой, которая форматирует переменную Currency на этикетке. При отладке, как описано выше (присоединение к процессу и т. Д.), Отладчик показал правильное значение. Теперь интересно, если проблема связана с отладкой службы ...