Delphi调试器显示????对于货币变量

时间:2009-08-25 08:39:15

标签: delphi debugging currency

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

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

我正在使用的流程是:

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

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

    它似乎与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变量格式化为标签。如上所述进行调试(附加到进程等),调试器显示正确的值。现在想知道问题是否特定于调试服务......

2 个答案:

答案 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相同的目录。

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