代码之家  ›  专栏  ›  技术社区  ›  WileCau

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

  •  1
  • WileCau  · 技术社区  · 15 年前

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

    我正在使用Delphi10更新2在Windowsxpsp3上进行调试。

    我使用的过程是:

    1. 在BDS IDE中构建项目。
    2. 将exe复制到服务预期所在的目录。
    3. 启动服务。它在本地运行,我不想远程调试。
    4. 附加到服务进程(运行附加到进程)。
    5. 进程在我的断点处停止,因此附加似乎正常。
    6. 计算变量的值。

    要评估我尝试过的变量:

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

    它似乎与货币有关,所以我尝试将变量类型从货币更改为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
    

    有人能提出是什么导致了这一切,以及我如何使之起作用吗?

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

    2 回复  |  直到 15 年前
        1
  •  2
  •   Tobias Langner    15 年前

    嗯-它在2006年的德尔菲为我工作。不过,我只创建了一个小的控制台应用程序。解决方法的建议-将变量强制转换为调试器内的Int64。它应该显示值乘以10000。

        2
  •  2
  •   WileCau    15 年前

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

    Program.rsm 在以下情况下生成 Include remote debug symbols 已启用。我已经检查过了,但不认为它是相关的,因为我在本地调试。我只使用过 程序.rsm 当远程调试时,我没有想到本地调试,但是在另一个目录中是“远程”的。

    因此,似乎有三种可能的解决方案:

    • 设置路径 程序.rsm 在:
      Project γ Options γ Debugger γ Symbol Tables γ Debug symbols search path .

    • 将输出目录设置为:
      项目 γ 选项 γ Directories/Conditionals γ Output directory .

    • 拷贝 程序.rsm 到同一目录 程序EXE 调试前。

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