1

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

我正在使用 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 显示值为????.
  • 局部变量窗口显示的值为{

它似乎与 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

谁能建议造成这种情况的原因以及我如何使它起作用?

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

4

2 回答 2

2

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

于 2009-08-25T09:20:10.460 回答
2

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

Program.rsmInclude 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

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

于 2009-08-25T10:16:55.320 回答