web-dev-qa-db-ja.com

クラス内のインスタンス変数の値が変更された場合、ブレークポイントをトリガーするにはどうすればよいですか?

変数があるとしましょう、self.position、Xcodeが値を変更するたびにXcodeを中断させるにはどうすればよいですか(多くのメソッドが変更する可能性があります)。

17
Doug Smith

条件付きブレークの場合:

  1. Cmd + optionはブレークポイントをクリックします
  2. 次のようなブレーク条件を追加します。

enter image description here

値が変更されるたびに中断する場合:

  1. 些細なセッター(およびクリーンなコードのためのゲッター)を実装します。
  2. セッターにブレークポイントを追加します。

誰がセッターを呼び出したかを確認したい場合は、スタックトレースの次の行(私の例ではviewDidLoad)を見てください。

enter image description here

更新:

ウォッチポイントの追加

  1. (lldb)プロンプトがコンソールに表示されるようにどこでも中断します
  2. watchpoint set variable _positionを入力します(_positionを監視したいiVarに置き換えます)
  3. 新しく作成したウォッチポイントに割り当てられたウォッチポイント番号をメモします。
  4. 条件付きブレークのウォッチポイントを変更します。watchpoint modify -c "_position < 0.5" 1ここで、引用符で囲まれた式は条件であり、最後の番号は#3でメモしたウォッチポイント番号です。
  5. 実行を続けます。値が条件に一致するたびに中断し、スタックフレームを調べて、呼び出しがどこから来たのかを理解できるようになります。
28
Stavash

シンボリックブレークポイントを設定します。ブレークポイントナビゲーターに移動し、[+]をクリックして、[シンボリックブレークポイントの追加]をクリックします。最初のフィールドに「-[YourSubclassNameHeresetPosition:]」と入力し、他の設定を追加して、ダイアログの外側をクリックします。

7
moonman239

それを行う簡単な方法は、ウォッチウィンドウで変数を右クリックし、ウォッチ変数オプションを選択することです。 Xcodeは、値が変更されると警告を発します。

または、 Key-Value Observing を確認することもできます。

5
geekchic

positionのセッターをオーバーライドして、変数を設定するときにブレークポイントを設定できます。

2
user2666713