4

私は長い間Delphiの開発者であり、以前は開発中にロギングとデバッグにサードパーティのツール(Smart Inspectと呼ばれます)を使用していましたが、Delphi XEにアップグレードしたので、デバッグにIDEを使用してみたいと思います。

私の質問は、次のような関数が与えられたということです

procedure MyFunction;
var
    str : string;
begin
    str := 'Foo';
    //Debug, show value of str?
    str := AnotherFunction(str);
    //Debug, show value of str?
end;

showmessage(str);のような愚かなことをせずに、どのようにデバッグしてstrの値を取得できますか。

どこかにビデオ(または記事)があれば、私は喜んで読んでいます。

変数の値を監視/出力する方法はありますか?

4

6 に答える 6

9

IDEデバッガのみを使用する場合は、次の手順を実行します。

  • どこかにブレークポイントを置く
  • ブレークポイントの円を右クリックして、[ブレークポイントのプロパティ...]を選択します。
  • 「詳細」ボタンを押して、その他のオプションを表示します
  • 「ブレーク」チェックボックスのチェックを外します
  • 次に、「ログメッセージ」および「評価式」編集ボックスを使用してトレース値を入力します

このようなメッセージは、「イベントログ」デバッガペインに送信されます。ペインを右クリックして、[プロパティ]を選択します。そこで、必要に応じてトレースメッセージをフィルタリング(「メッセージ」)/ハイライト(「色」)することができます。

于 2010-12-09T20:14:40.433 に答える
8

Delphi XEにはCodeSiteロギングが付属していますが、デバッガー自体について話しているように感じます。

ルーチンにブレークポイントを設定すると、ブレークポイントに到達したときにデバッガーにブレークポイントが適用されます。そこから、IDEの左側に[ローカル変数]ペインと[ウォッチ]ペインがあります。ローカル変数はすべてのローカルの値を表示し、ウォッチを使用すると、値を追跡する式を設定できます。

Inspect()を使用すると、時計に似たものを取得できますが、より詳細な情報(特にオブジェクトなどの構造化タイプの場合)が含まれますAlt-F5。また、Evaluate / Modified(Ctrl-F7)を使用すると、式を入力して評価することができます。Inspectほど詳細ではありませんが、柔軟性が大幅に向上します。

これらのツールに精通している場合は、デバッグがはるかに簡単になります。

于 2010-12-09T18:46:30.287 に答える
5

1)OutputDebugString関数を使用して、デバッグウィンドウに文字列を出力できます

2)CodeSiteExpressを使用できます。CodeSiteを使用するための出発点として、CodeRage5のビデオをお勧めします

于 2010-12-09T18:34:02.907 に答える
1

他の答えはすべて正しいです。

私の個人的なお気に入りのテクニック(da-softによる回答と同じ)は、ブレークポイントを作成することです。ブレークポイントは、ログに記録したい値を含むメッセージをイベントログに記録し、実際には「中断」しません(つまり、実行が続行されます)。実行アイコンを押さずに)。その後、そのコード行に到達するたびに、メッセージと値がログに記録されます。戻って履歴を読んだり、現在の値を確認したりできるので、デバッガーのウォッチウィンドウを使用するよりも便利です。

ただし、Delphi XEにはCodeSiteが含まれているため、ブレークポイントでの式の評価が行うことをはるかに超えることができます。ただし、コードサイトでは、ログを追加するためにコードを変更する必要があります。ただし、メッセージボックスよりもはるかに優れています。

OutputDebugString(PChar(s))を使用して、任意の文字列をデバッガーに出力することもできます。これには必要なものを含めることができるため、デバッグするのに非常に優れた方法ですが、エンドユーザーには表示されません。

私のアプリケーションの多くには、循環型の特別なトレースバッファがあります(つまり、最後の500行程度しか保持されません)。問題が発生した場合は、スタックトレースバックを取得するだけでなく、そのメモリ内トレースログも保存するため、問題の直前に何が起こっていたかについての履歴があります。

Log4Delphiプロジェクトをチェックアウトすることもできます。

于 2010-12-09T22:10:09.783 に答える
0

デバッガーのヒントが好きです。デバッガーにアクセスした後、マウスをコード内の任意の場所の「str」に移動すると、現在の値が表示されます。また、マウスでステートメントを強調表示して評価することもできます。たとえば、「AnotherFunction(str)」を強調表示して、その上にマウスを置きます。

于 2010-12-09T21:30:36.163 に答える
0

他の答えには何の問題もありませんが、これらの便利な関数を追加したかっただけです。

procedure DebugString ( const s : string ) ; overload ;
begin
  {$IFDEF DEBUG}
  OutputDebugString ( PChar ( s ) ) ;
  {$ENDIF}
end ;

procedure DebugString ( const s : string ; args : array of const ) ; overload ;
begin
  {$IFDEF DEBUG}
  OutputDebugString ( PChar ( Format ( s , args ) ) ) ;
  {$ENDIF}
end ;
于 2011-04-15T17:05:31.630 に答える