Xcode 4を使い始めたところ、プロジェクトでデバッグシンボルをどのように設定しても、Instrumentsは自分のコードに対応するスタックトレースアイテムのソース行を表示しないことがわかりました。は16進オフセットのみを表示し、実行可能ファイルを所有モジュールとして識別します。 「ソースの場所」をオンにすると、空白も描画されます。これは、Xcodeによって生成されたスケルトンOpenGL ESプロジェクト([ファイル]→[新規]→[新規プロジェクト...]→[iOS]→[アプリケーション]→[OpenGL ESアプリケーション])でも発生します。
この問題はInstrumentsでのみ発生します(これまでCPUとOpenGLのトレースを試しました)。 Gdbはデバッグシンボルを問題なく取得します。
Instrumentsでスタックトレースのソースコードを表示するには、何か特別なことをする必要がありますか、それともXcode 4のバグですか?
これまでのところ、私は:
Debug Information Format
from DWARF with dSYM File
からDWARF
。Strip Debug Symbols During Copy
Yes
からNo
へ。他の答えは良い長期的な修正です。 Spotlightがインデックスを再構築するのを待たずに、1つのInstrumentsセッションのシンボルを取得する必要がある場合は、Instrumentsに現在のセッションをシンボル化するように依頼できます。
dSYM
ファイルが表示されます。 Instrumentsに戻り、このディレクトリに移動して、dSYM
ファイルを選択します。最も簡単な方法は、dSYM
ファイルをFinderからInstrumentsの[SelectdSYM]ダイアログに直接ドラッグすることです。私は今日この問題を抱えていて、次のように解決しました。
それはそれをする必要があります。何らかの理由で、ビルドターゲットがプロファイルターゲットと同じビルド構成に設定されておらず、これにより1、2時間以上トリップしたことに注意してください。
リリース構成に対して、別のコード署名ID、つまりプロビジョニングプロファイルを選択してみてください。
まったく同じ問題があったので、問題が何であるかを知りました。
答えは次のとおりです。 Instrumentsを使用してIPhoneアプリケーションをプロファイリングするときにシンボル名が欠落している
-g3
)。dsymutil
を実行します。これにより、dSYMバンドルフォルダーが生成され、Spotlightによってインデックスが作成されると、必要なデバッグ情報がInstrumentsで利用できるようになります。
あなたの場合、Spotlightがインデックスを作成するまでに少し時間がかかったと思います。インデックスが作成された場合、魔法のようにうまくいきました。
動作を開始したばかりです。韻や理由はありません。
ここでより有用な答えを提供することを期待して、私は最後の30分を再び失敗させるために費やしましたが、スケルトンOpenGLプログラムを最初から再作成した後でも、すべてのステップをたどることはできません。
私はemacsでsymbolicatecrashスクリプトを開きました(これは他の場所で関係しているので、この種の問題があります)。これを行った後、動作を開始しました。しかし、私はそれを変更したり保存したりしませんでした。
それは謎です。
シンボルがない機器の理由の1つは、SpotlightがdSYMファイルを見つけられないことである可能性があります。したがって、DWARF with dSYM
からDWARF
への変更はお勧めできません。 dSYMファイルがないとシンボルを取得できないため、元に戻す必要があります(少なくとも、Snow Leopardの場合はそうですが、dSYMファイルがない場合もシンボルを取得する人がいるという報告がありますが、すべての人がライオンを使用していた)。変更を加えた後、必ずクリーンビルドを作成してください(Xcodeが非クリーンビルド用にシステム上でdSYMファイルを生成できない場合があります)。
それでもシンボルが表示されない場合は、Spotlightデータベースに問題があります。ビルド後にdSYMファイルを含むフォルダーをフォルダーのリストに追加してみてください。Spotlightはインデックスを作成せず、そのリストから再度削除します。これにより、Spotlightはファイルのインデックスを再作成します。
これでも問題が解決しない場合は、Spotlightインデックスが完全に破損している可能性があります。その場合は、ターミナルで次のことを試してください。
Sudo mdutil -i off /
Sudo mdutil -E /
Sudo mdutil -i on /
これにより、Spotlightは最初にメインハードドライブのインデックス作成を停止し、次に過去に収集されたすべてのインデックスデータを削除してから、インデックスの再作成を開始します。上記の行は、dSYMファイルがメインハードドライブにあることを前提としています(他のハードドライブやネットワークボリュームにはない。そうでない場合は、「/」をそのボリュームの適切なマウントポイントに置き換える必要があります)。再試行する前に、Spotlightにインデックスを再作成する時間を与えてください。
新しいバージョンのInstruments(私は5.1.1 (55045)
を持っています)では、dSYMとソースコードを検索するためのパスを追加できます
Instrumentsの設定を開き、「dSYMsAndPaths」タブをクリックします。
次に、パスをリストに追加します。
これが私の環境です...
シミュレーターで同じ問題が発生しましたが、すべての標準的な修正が機能していなかったため、問題が発生していました。
私にとってそれは、iPadをMacBookに接続し、接続したiPadでそのアプリに対してインストルメントセッションを実行することでした。インストルメントは、iPadで実行しているときにアプリを適切に象徴し、iPadを切断して、後でシミュレーターでインストルメントを実行しても機能し続けました。
以下を使用するようにプロジェクトを更新することと関係があると思います...
なぜそうなるのかはわかりませんが、Instrumentsでシンボルが失われる前に行ったプロジェクトの変更はこれだけでした。