0

メインフォームで CM_DIALOGKEY メッセージを処理するアプリケーションがあります。

procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;

これは最近のある時点まで機能していましたが、どの時点で何かが変更されたのか、さらに重要なことに何が変更されたのかわかりません。空のアプリケーションを作成し、上記のメッセージ ハンドラーを配置すると、メッセージが処理され、特定のキーストロークで処理を行うことができます。どこかで、メッセージを処理し、そのメッセージを伝達しないコードが追加されたに違いありませんが、私の人生では、何を理解することはできません。これをデバッグする方法についてのアイデアはありますか? 誰かが特定のブレークポイントのアイデアを持っていない限り、ブレークポイントは明らかに問題外です。

4

1 に答える 1

1

これをデバッグする方法についてのアイデアはありますか?

これをデバッグする方法は次のとおりです。

  1. バージョン管理システムを使用して、動作を変更したコミットを分離します。
  2. 意図したとおりに機能した最後のコミットを使用して、 にブレークポイントを設定しますCMDialogKey
  3. ブレークポイントがトリガーされるまでプログラムを実行し、この状態でコール スタックのコピーを作成します。
  4. 機能しない最初のコミットに切り替えます。ステップ 3 のコール スタックの上位にブレークポイントを設定すると、トリガーが実行されます。そのような場所を見つけるには少し作業が必要になる場合があり、条件付きブレークポイントを使用する必要がある場合があります。たとえば、 condition が必要になる場合がありますMessage.Msg=CM_DIALOGKEY
  5. 次に、ステップ 3 で見たコール スタックから実行が分岐するポイントを見つけます。

この時点で、動作の変更を分離し、解決策を調査できる状態になっているはずです。

于 2013-11-05T09:09:45.587 に答える