【问题标题】:Delphi debugger showing ???? for Currency variables德尔福调试器显示???对于货币变量
【发布时间】:2010-11-22 13:12:17
【问题描述】:

我试图查看变量的值,但调试器显示的值为“????”。这似乎发生在 Currency 变量上,但不是其他类型(双类型和枚举类型都可以)。

我正在使用 Delphi 10 Update 2 在 Windows XP SP 3 上进行调试。

我正在使用的流程是:

  1. 在 BDS IDE 中构建项目。
  2. 将 exe 复制到预期服务所在的目录。
  3. 启动服务。它在本地运行,我不尝试远程调试。
  4. 附加到服务进程(运行|附加到进程)。
  5. 进程在我的断点处停止,所以附加似乎没问题。
  6. 评估变量的值。

评估我尝试过的变量:

  • 将鼠标悬停在变量名上。通常这会显示值,但在这种情况下它不会显示任何内容(即没有弹出窗口)。
  • 右键单击变量名,Debug、Evaluate/Modify 显示值为????
  • 右击变量名,Debug,Add Watch at Cursor 显示值为????
  • “局部变量”窗口显示的值为 {

这似乎与货币有关,所以我尝试将变量类型从货币更改为双精度,当我重新运行测试时,调试器显示正确的值。

我试图评估的变量是一个局部变量,没有什么棘手的事情,例如:

  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

任何人都可以建议是什么导致了这种情况以及我如何使它起作用?

编辑: 我尝试了一个测试程序,该程序由一个带有按钮的表单组成,该按钮将货币变量格式化为标签。如上所述进行调试(附加到进程等),调试器显示了正确的值。现在想知道问题是否特定于调试服务...

【问题讨论】:

    标签: delphi debugging currency


    【解决方案1】:

    嗯 - 它适用于 Delphy 2006。不过我只创建了一个小型控制台应用程序。解决方法的建议 - 将变量转换为调试器内的 int64。它应该显示乘以 10000 的值。

    【讨论】:

    • 感谢 Tobias,我尝试了你的建议,调试器说“E2268 Call to undefined function 'Int64'”这让我觉得我有更大的问题,最终让我发现我的符号不在正确的地方(请参阅我的答案以获取解释)。感谢您花时间做一个测试应用程序。
    【解决方案2】:

    问题似乎是由于program.rsm 文件与program.exe 不在同一目录中(我的过程的第 2 步将 exe 复制到其他地方)。

    Program.rsm 在启用Include remote debug symbols 时生成。我检查了它,但认为它不相关,因为我在本地调试。我只在远程调试时使用过program.rsm,我没有想到在本地调试但在不同的目录中进行调试是一种“远程”。

    所以似乎有三种可能的解决方案:

    • 将路径设置为program.rsm in:
      Project | Options | Debugger | Symbol Tables | Debug symbols search path

    • 将输出目录设置在:
      Project | Options | Directories/Conditionals | Output directory.

    • 调试前将program.rsm复制到program.exe所在目录下。

    为什么货币变量是唯一受影响的变量仍然是个谜。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      相关资源
      最近更新 更多