5

私は、同様の非同期ブロックの束をディスパッチするいくつかのGCDコードを使用しています。これらのブロックの1つをステップスルーしてデバッグしたいので、ブロックの上部近くにブレークポイントを設定しましたが、新しいブロックが送信されるたびにデバッガーがブレークポイントにヒットするため、ステップスルーすることはできません。ブロック、同じ行の異なるスレッド間でスワップされます。

私の質問は、特定のスレッドを条件とするようにブレークポイントを設定するにはどうすればよいですか?つまり、スレッド4で実行された場合にのみトリガーする必要がありますか?

編集

ブロックのコードは非常に時間がかかるため、ブロック内の次の行を実行する前にスケジューラーが別のスレッドにスワップし、新しくスケジュールされた別のGCDブロックが順番を取得して、同じブレークポイントをトリガーすることを追加する必要があります。

4

2 に答える 2

8

これはXcodeブレークポイントUIで公開されているとは思いませんが、lldbではブレークポイントを変更して、(1)スレッド名が一致する、(2)ディスパッチキュー名が一致する、(3)スレッドIDが一致する、または(4)スレッドインデックス番号が一致します。ブレークポイント()を作成するときにこれらの基準を指定するか、 。を使用breakpoint setして既存のブレークポイントにこれらの基準を追加できますbreakpoint modifyhelp breakpoint modify許可される引数のリストについては、デバッガコンソールウィンドウを参照してください。

于 2013-01-18T21:09:58.007 に答える
0

GDCコードでデバッグするには、 $gdbinvoke-blockを使用できます。

同じことについてより良い考えを持つために..

  1. ブロックとグランドセントラルディスパッチのガイド(およびそれらを利用するCocoa API)

  2. GDBを使用したデバッグ

また、dispatch_debugはどのように使用されることになっていますか?ガイドするためにすでにそこにあります。

于 2013-01-18T13:18:06.193 に答える