1

変数の値を確認しようとしていますが、デバッガーに「????」の値が表示されます。これはCurrency変数に発生するようですが、他の型には発生しません(Double型と列挙型は問題ありません)。

Delphi 10Update2を使用してWindowsXPSP3でデバッグしています。

私が使用しているプロセスは次のとおりです。

  1. BDSIDEでプロジェクトをビルドします。
  2. exeを、サービスが存在すると予想されるディレクトリにコピーします。
  3. サービスを開始します。ローカルで実行されており、リモートデバッグを試みていません。
  4. サービスプロセスにアタッチします([実行] | [プロセスにアタッチ])。
  5. プロセスはブレークポイントで停止するため、アタッチは問題ないようです。
  6. 変数の値を評価します。

私が試した変数を評価するには:

  • 変数名の上にマウスを置きます。通常、これは値を表示しますが、この場合は何も表示されません(つまり、ポップアップは表示されません)。
  • 変数名を右クリックすると、[デバッグ]、[評価/変更]に値が表示されます????
  • 変数名を右クリックすると、[デバッグ]、[カーソル位置にウォッチを追加]の値が表示されます????
  • [ローカル変数]ウィンドウには、の値が表示されます{

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変数をラベルにフォーマットするボタンのあるフォームで構成されるテストプログラムを試しました。上記のようにデバッグすると(プロセスへの接続など)、デバッガーは正しい値を示しました。問題がサービスのデバッグに固有のものであるかどうか疑問に思っています...

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私はリモートでデバッグするときにしか使用していませんでしたが、ローカルではなく別のディレクトリでデバッグすることが「リモート」のようなものだとは思いもしませんでした。

したがって、次の 3 つの解決策が考えられます。

  • パスを次のように設定しprogram.rsmます
    ProjectOptions| | Debugger| | Symbol Tables| | Debug symbols search path.

  • 出力ディレクトリを次の場所に設定します
    ProjectOptions| | Directories/Conditionals| | Output directory.

  • デバッグ前program.rsmと同じディレクトリにコピーします。program.exe

なぜ Currency 変数だけが影響を受けたのかは謎のままです。

于 2009-08-25T10:16:55.320 に答える