web-dev-qa-db-ja.com

Xcode 4Instrumentsはソース行を表示しません

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 CopyYesからNoへ。
  • Instrumentsでのリリースビルドの代わりにデバッグビルドを使用するようにビルドスキームを変更しました。
28
Marcelo Cantos

他の答えは良い長期的な修正です。 Spotlightがインデックスを再構築するのを待たずに、1つのInstrumentsセッションのシンボルを取得する必要がある場合は、Instrumentsに現在のセッションをシンボル化するように依頼できます。

  1. [ファイル]→[ドキュメントの再シンボル化]を選択します… screenshot of re-symbolicate menu item
  2. 表示されるリストでバイナリを見つけます。 Springboardに表示されるのと同じ名前である必要があります。バイナリを選択し、[検索]をクリックします。 enter image description here
  3. Xcodeに戻ります。 Controlキーを押しながら.appビルド製品をクリックし、[Finderに表示]を選択します。right-click menu screenshot showing show in Finder item
  4. これにより、バイナリを含むディレクトリとそのdSYMファイルが表示されます。 Instrumentsに戻り、このディレクトリに移動して、dSYMファイルを選択します。最も簡単な方法は、dSYMファイルをFinderからInstrumentsの[SelectdSYM]ダイアログに直接ドラッグすることです。
  5. 最後に、Instrumentsの「Symbolicate」をクリックします。これで、16進オフセットではなく、トレースにシンボルが表示されるはずです。
48
Phil Calvin

私は今日この問題を抱えていて、次のように解決しました。

  1. スキームの編集
  2. 左側の「プロファイル」をクリックします(これは重要なステップです)
  3. ビルド構成をデバッグに変更

それはそれをする必要があります。何らかの理由で、ビルドターゲットがプロファイルターゲットと同じビルド構成に設定されておらず、これにより1、2時間以上トリップしたことに注意してください。

44
JonnyBoy

リリース構成に対して、別のコード署名ID、つまりプロビジョニングプロファイルを選択してみてください。

3
leo

まったく同じ問題があったので、問題が何であるかを知りました。

答えは次のとおりです。 Instrumentsを使用してIPhoneアプリケーションをプロファイリングするときにシンボル名が欠落している

  1. デバッグフラグを有効にしてコードをコンパイルしたことを確認します(例:-g3)。
  2. デバッグ情報にアクセスできるようにするバイナリ/ダイナミックライブラリでdsymutilを実行します。

これにより、dSYMバンドルフォルダーが生成され、Spotlightによってインデックスが作成されると、必要なデバッグ情報がInstrumentsで利用できるようになります。

あなたの場合、Spotlightがインデックスを作成するまでに少し時間がかかったと思います。インデックスが作成された場合、魔法のようにうまくいきました。

2
Dan

動作を開始したばかりです。韻や理由はありません。

ここでより有用な答えを提供することを期待して、私は最後の30分を再び失敗させるために費やしましたが、スケルトンOpenGLプログラムを最初から再作成した後でも、すべてのステップをたどることはできません。

私はemacsでsymbolicatecrashスクリプトを開きました(これは他の場所で関係しているので、この種の問題があります)。これを行った後、動作を開始しました。しかし、私はそれを変更したり保存したりしませんでした。

それは謎です。

1
Marcelo Cantos

シンボルがない機器の理由の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にインデックスを再作成する時間を与えてください。

1
Mecki

新しいバージョンのInstruments(私は5.1.1 (55045)を持っています)では、dSYMとソースコードを検索するためのパスを追加できます

Instrumentsの設定を開き、「dSYMsAndPaths」タブをクリックします。

Preference tabs

次に、パスをリストに追加します。

Add a search path to the list

1
Shepmaster

これが私の環境です...

  • XCode 8.2
  • Mac OS v10.12 Sierra

シミュレーターで同じ問題が発生しましたが、すべての標準的な修正が機能していなかったため、問題が発生していました。

私にとってそれは、iPadをMacBookに接続し、接続したiPadでそのアプリに対してインストルメントセッションを実行することでした。インストルメントは、iPadで実行しているときにアプリを適切に象徴し、iPadを切断して、後でシミュレーターでインストルメントを実行しても機能し続けました。

以下を使用するようにプロジェクトを更新することと関係があると思います...

  • libsqlite3.dylibの代わりにlibsqlite3.tbd
  • libstdc ++。dylibの代わりにlibstdc ++。6.tbd

なぜそうなるのかはわかりませんが、Instrumentsでシンボルが失われる前に行ったプロジェクトの変更はこれだけでした。

0
Logicsaurus Rex