2016-10-04 9 views
3

Swiftを使用するときにシンボリックブレークポイントをlldbに設定するにはどうすればよいですか?例えば、時々私が使用していない:Swiftとlldbを使ってシンボリックブレークポイントを設定する

(lldb) b set -F '-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded]' 

しかし、これはもはや作品:

ブレークポイント2:なし場所(保留します)。警告: ブレークポイントを実際の場所に解決できません。

私も

(lldb) b set -F 'UIView.updateConstraintsIfNeeded()' 
(lldb) b set -F 'UIView.updateConstraintsIfNeeded' 

しかし、無愛を試してみました。私は、lldbがSwiftを使うときに "完全修飾された関数名"とみなされることに疑問があると思う。ドキュメントは言う:

-F(--fullname)

は、完全修飾関数名でブレークポイントを設定します。 C++の場合、 は名前空間とすべての引数を意味し、Objective Cの場合はこれは クラスとセレクタを持つ完全な関数プロトタイプを意味します。 を複数回繰り返して、複数の名前に対して1つのブレークポイントを作成することができます。

スウィフトはどうですか?

答えて

3

lldbが(-Fを含む)好きなマッチングブレークポイントのどれかをブレークポイントに設定しているとき、それはマッチするものがそれに依存するので、ターゲット言語を知る必要があります。デフォルトでは、lldbは現在のフレームの言語を選択しますが、それを上書きすることができます。

(lldb) break set -F '-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded]' -L objc 
Breakpoint 3: where = UIKit`-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded], address = 0x0000000100963acc 

またはあなたはそれが一致するシンボルを理解しようとしない-nブレークオプションを使用しますが、ちょうどすることができますので、インスタンスを使用すると、スウィフトフレームで停止しているにObjCのシンボルでブレークするために、やりますその文字列をシンボル名で幅広く検索します。

このケースでは、スウィフトに表示される方法ではなく、ObjCシンボルを破る必要があります。なぜなら、スピーディーな側面は実際にはobjcへのシムに過ぎず、本当に迅速なサイドシンボルはありません。

+0

あなたは私の質問に答えました。ありがとう!では、Xcodeの "シンボルブレークポイントの追加" UI(lldbコマンドラインとは対照的に)を使用して同等のブレークポイントを設定することはできませんか?つまり、Swift-mangledシンボル名を知らなくても... –

+0

Xcodeのシンボルブレークポイントは 'break set -n'と同じです。これは、より緩やかな名前の一致である傾向がありますので、 "ブレークポイント言語"はそれほど重要ではありません(ただし、Foo :: Bar vrs。SwiftのFoo.Barを実行したい場合は、言語が重要です)。 'ブレークポイントは、彼らがあまりにも広いネットをキャストすることです。しかし、Xcode UIでは、検索する共有ライブラリを指定することもできます。これにより、ノイズを多少減らすことができます。 –

関連する問題