10

Xcode 4.5内で(Apple)LLVM 4.1を使用しています(ただし、以前のベータ版でも同じことが見られました)。私はC++ 11をターゲットにしており、libc ++(新しいC ++ 11対応のLLVMバージョンのstdライブラリ)を使用しています。

デバッグ ビルドで、std ライブラリ関数 (std::vector コンストラクターなど) を呼び出すコードをステップ オーバーしようとすると、デバッガーは std lib 実装で停止し、ステップ アウトしようとするとさらに深くステップします。自分のコードに戻るまでに、数回 (場合によっては 10 回以上) ステップ アウトする必要があります (そして、最初から介入したくなかったのです)。

常に _LIBCPP_DEBUG マクロと _LIBCPP_INLINE_VISIBILITY が表示されているようですが、これらはどこにでもあるように見えるので、相関関係があるかどうかはわかりません。ただし、インライン化の動作と関係があることはもっともらしいようです。

この問題を抱えている他の例を見つけることはできませんでしたが、私にとっては、いくつかのベータ版、リリース、および OS の完全な再インストールを経て、問題が解決しませんでした。

他の誰かがこれをたことがありますか?- しかし、何が起こっているのかはまだよくわかっていますか?

4

2 に答える 2

7

Xcode 4.5 の lldb は、インライン化された関数のステップ オーバーを処理しません。libc++ 標準ライブラリには、-O0 でビルドされた場合でも常にインライン化される多くの関数があり、これが問題になります。Jim Ingham が約 1 か月前にこれに取り組んだようです。たとえば、最初のパッチhttp://llvm.org/viewvc/llvm-project?view=rev&revision=163044と、次の 1 ~ 2 週間にわたるいくつかの後続パッチを参照してください。もちろん、これらはまだ lldb のリリース バージョンには含まれていません。パブリック サイトhttp://lldb.llvm.org/ (特にhttp://lldb.llvm.org/build.htmlを参照)から lldb のコマンド ライン バージョンをビルドして使用できます。lldb/docs/code-signing.txt のコード署名手順に従うことを忘れないでください。

于 2012-10-01T21:08:58.223 に答える
1

これも、libc ++だけでなく、libstdc ++(GCCおよびC++03モードのclangで使用されるGNUC++標準ライブラリ)でも見ました。私はいつもそれがインライン化によるものだと思っていましたが、これはデバッグビルドでも時々起こると思います。

于 2012-10-01T08:54:34.407 に答える