0

Xcode の最近のバージョンでは、インライン化された関数が表示され、インライン化されたコード内をステップ実行できることがわかっています。std::function を多用するコードをデバッグしようとしていますが、コール スタックとステップイン操作の両方で、std::function のすべての実装の詳細を単純にスキップすることをお勧めします。新しい libc++ は、これらの詳細を属性「always_inline」でマークするため、(デバッグ ビルドであっても) 常にインライン化されます。これはまさに私が望んでいることです。実際、私は std::function 実装をデバッグしていないので、これらの関数を見たくないだけです...

4

1 に答える 1

2

あなたは今それをすることはできません. lldb がバックトレースでスタック フレームを報告する方法を変更できます -- http://lldb.llvm.org/formats.htmlを参照してください-- しかし、(合成された) インライン スタックを抑制する方法は思いつきません。バックトレースからのフレーム。gdb には、デバッグ情報のインライン化されたすべての情報を解析しないようにする設定がありました。ステッピングもバックトレースもありませんが、lldb には追加されていません。

現実的には、インライン コード サポートのステッピングを無効にしたくはありません。どのコードがインライン化されているかを特定しないと、ステップ実行の「次へ」または「ステップオーバー」モードが、インライン化されたコードでひどく壊れます。Xcode 4.6 はこれが得意ですが、残りのケースでは、インライン コードを含むソース行を「ステップ オーバー」し、.hファイルからの実際のインライン実装がコンパイラからの誤ったデバッグ情報によるものであることがわかります。このデバッグ情報を正しく取得するのは難しく、大部分は正しいですが、Xcode 4.6 ではインライン化されたメソッドになってしまうことがあります。おそらく、使用しているコンテナの場合、頻繁にヒットしていますが、それは一般的なケースではありません.

lldb は の出力をカスタマイズする方法を提供します。http://lldb.llvm.org/formats.htmlbtを参照してください。ただし、インライン スタック フレームを抑制する方法はありません。実際のスタック ウォーカーと同じことを行うが、インライン フレームをスキップするスタック ウォーカーを Python でかなり簡単に作成できます。メソッドを使用すると、これが簡単になります。しかし、Xcode を使用しているインスタンスでは役に立ちません。btSBFrame::IsInlined()

于 2013-02-16T04:56:33.653 に答える