I’m trying to see the value of a variable, but the debugger shows me a value of “????”. This seems to happen to Currency variables, but not other types (Double and enumerated types are ok).
I’m debugging on Windows XP SP 3 using Delphi 10 Update 2.
The process I’m using is:
- Build the project in the BDS IDE.
- Copy the exe to the directory where the service is expected to live.
- Start the service. It’s running locally, I’m not trying to remote debug.
- Attach to the service process (Run | Attach to Process).
- The process stops at my breakpoint(s), so the attaching seems to be ok.
- Evaluate the value of a variable.
To evaluate the variable I’ve tried:
- Hovering the mouse over the variable name. Usually this displays the value, but in this case it doesn’t show anything (i.e. no pop-up).
- Right-click the variable name, Debug, Evaluate/Modify shows a value of
????. - Right-click the variable name, Debug, Add Watch at Cursor shows a value of
????. - The Local Variables window shows a value of
{.
It seems to be related to Currency, so I tried changing the variable type from Currency to Double, and when I re-ran the test the debugger showed the correct value.
The variables I’m trying to evaluate is a local variable with nothing tricky being done, e.g.:
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;
The Project Options I think might be relevant are:
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
Can anyone suggest what’s causing this and how I can make it work?
Edit:
I tried a test program consisting of a form with a button that formats a Currency variable onto a label. Debugging as described above (attach to process etc), the debugger showed the correct value. Now wondering if the problem is specific to debugging a service …
The problem seems to be due to not having
program.rsmfile in the same directory asprogram.exe(step 2 of my process copied the exe to somewhere else).Program.rsmis generated whenInclude remote debug symbolsis enabled. I had it checked, but didn’t think it was relevant because I was debugging locally. I’d only ever usedprogram.rsmwhen debugging remotely, and it didn’t occur to me that debugging locally but in a different directory is kind of “remote”.So there appear to be three possible solutions:
Set the path to
program.rsmin:Project|Options|Debugger|Symbol Tables|Debug symbols search path.Set the output directory in:
Project|Options|Directories/Conditionals|Output directory.Copy
program.rsmto the same directory asprogram.exebefore debugging.It’s still a mystery why the Currency variables were the only ones affected.