我正在尝试查看变量的值,但调试器显示的值为“????”。这似乎发生在Currency变量上,而不是其他类型(Double和枚举类型都可以)。
我正在使用Delphi 10 Update 2在Windows XP SP 3上进行调试。
我正在使用的流程是:
评估我尝试过的变量:
????
。????
。{
。它似乎与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
有人能说出造成这种情况的原因以及如何使其发挥作用吗?
编辑: 我尝试了一个测试程序,该程序由带有按钮的表单组成,该按钮将Currency变量格式化为标签。如上所述进行调试(附加到进程等),调试器显示正确的值。现在想知道问题是否特定于调试服务......
答案 0 :(得分:2)
嗯 - 它在Delphy 2006中对我有用。我只创建了一个小型控制台应用程序。解决方法的建议 - 将变量转换为调试器内的int64。它应该显示值乘以10000。
答案 1 :(得分:2)
问题似乎是由于program.rsm
文件与program.exe
不在同一目录中(我的进程的第2步将exe文件复制到其他地方)。
Program.rsm
时会生成 Include remote debug symbols
。我检查了一下,但不认为它是相关的,因为我在本地调试。我在远程调试时只使用过program.rsm
,并且我没有想到在本地调试但在不同的目录中是一种“远程”。
所以似乎有三种可能的解决方案:
将路径设置为program.rsm
:
Project
| Options
| Debugger
| Symbol Tables
| Debug symbols search path
。
将输出目录设置为:
Project
| Options
| Directories/Conditionals
| Output directory
。
在调试之前将program.rsm
复制到与program.exe
相同的目录。
为什么货币变量是受影响的唯一因素,这仍然是一个谜。