13

問題

Xcode の関連するすべてのビルド設定でこの動作を無効にしているにもかかわらず、Instruments の Time Profiler はシステム ライブラリを除くすべてのシンボルをアプリから削除していますが、開発マシンは 1 つだけです。他の開発マシンは正常に動作します。

説明

Xcode の関連するすべてのビルド設定でこの動作を無効にしているにもかかわらず、Instruments の Time Profiler はシステム ライブラリを除くすべてのシンボルを削除していますが、これは私の開発マシンの 1 つでのみ発生しています。同じバージョンの OS X、Xcode、Instruments を実行している 2 つの開発マシンがあり、各マシンは同じ Xcode プロジェクトの同じコピーを使用しており、同じビルド設定、スキーム、およびその他の構成が使用されており、アプリは同じものを使用してプロファイリングされています。テスト デバイス (iOS 5 の最新公開バージョンを搭載した iPhone 4S)。

マシン 1
- Mac OS X 10.7.4
- Xcode 4.3.2 (4E2002)
- インストゥルメント 4.3 (4321)

マシン 2
- Mac OS X 10.7.4
- Xcode 4.3.2 (4E2002)
- インストゥルメント 4.3 (4321)

再現する手順

  1. 含まれているサンプル プロジェクトを各マシンで開きます。
  2. iPhone 4S がテスト デバイスとして選択されていることを確認します。
  3. 製品 > プロファイルを選択
  4. Instruments が起動したら、Time Profiler を選択して続行します。
  5. アプリを実行します。
  6. MacBook Air (マシン 2) ではなく、iMac (マシン 1) ではシンボルが削除されていることに注意してください。

予想される行動

自分のコードのシンボルは、両方のマシンのタイム プロファイラーに表示されるはずです。

回帰

次のすべてを試しましたが、実際の結果に変化はありませんでした。

  1. マシンを再起動しています。

  2. 他の Xcode プロジェクトを試す

  3. Xcode オーガナイザーですべてのプロジェクトの「派生データ」を削除します。

  4. Instruments でドキュメントを再記号化する (~/Library/blahBlahBlah… で正しい DSYM ファイルを慎重に選択する)

ファイナルノート

サンプル プロジェクトの .zip ファイルへのリンクを次に示します。Sample Project .zip

4

7 に答える 7

7

私は最終的に、核と舗装のシナリオに恥ずかしがり屋の方法でそれを機能させることができました:

  1. 現在のビルド構成ですべてのシンボル ストリッピングが無効になっていることを確認してください。それがインストゥルメント用にプロファイリングされている場合は、リリース構成に対してこれを行ったことを確認してください。
  2. iOS デバイスからアプリを削除します。
  3. iOS デバイスを再起動します。
  4. Mac を再起動します (そうしないと、Xcode や Lion が関連するすべてのプロセスを終了することをまったく信頼していません)
  5. Xcode を起動し、[オーガナイザー] > [プロジェクト] に移動して、影響を受けるプロジェクトの派生データを削除します。
  6. プロジェクトをクリーンアップします。地獄、どうして?
  7. Instruments のビルドとプロファイリング。
  8. わかりやすくするために、Instruments で Time Profiler を選択します。
  9. 最初の実行ではシンボルは表示されませんが、終了しないでくださいInstruments を実行したままにしておきます。
  10. 現在のビルドの正しい dSYM ファイルに慎重に移動して、Instruments でドキュメントを再記号化します。手順 5 で派生データを削除したので、これは簡単です。
  11. これで、シンボルが表示されるはずです。非目的の C シンボルを非表示にすると役立ちます。

手順 2 と 3 で、アプリを削除して iOS デバイスを再起動することをお勧めするのはなぜですか? Xcode は各ビルドのクリーン インストールを実行せず、Instruments に存在するシンボル アドレスが現在のビルドと以前のビルドが混在するように、デルタをインストールする可能性があるのではないかと疑っています。もしそうなら、この問題は、複数の Mac で 1 つのテスト デバイスを共有している私のような人にとってはさらに一般的です。この仮定は非常に正しくない可能性があります。

上記の手順がうまくいかない場合は、コメントでお知らせください。今後、詳細なレーダーレポートを作成したいと思います。

于 2012-07-05T19:35:47.153 に答える
1

私は何日も同様の問題を抱えていました。デバッグ構成をプロファイリングできましたが、リリースはできませんでした。最初に、リリース構成のコピーを作成しようとしましたが (Web 上のどこかで提案されているように)、そのコピーも機能しませんでした。

次に、プロファイルと呼ばれるデバッグのコピーを作成し、試してみると、プロファイルのシンボルがプロファイラーに表示されました。すごい!その後、最適化レベルなどをリリースと同じに変更したところ、動作するようになりました! このコメントで何時間も節約できたので、これを共有したかっただけです...

于 2013-01-03T16:23:16.287 に答える
1

4.3 で修正されたかどうかはわかりませんが、これは 4.2 の既知の問題です。

インストゥルメント Xcode 4.2 からの Profile アクションには既知の問題があります。ソース ファイルが変更されていないビルドの後、Instruments はターゲット アプリケーションのシンボルを収集できません。

これは、次の両方のプロジェクトに影響します。

  1. プロファイル アクションにはリリース構成が選択されています。(デフォルト)
  2. Strip Linked Product ビルド設定が「Yes」に設定されているか、カスタム Run Script ビルド フェーズが製品をストリップします。 (非デフォルト)

回避策は、次のいずれかを実行することです。

  1. プロファイル アクションを開始する前に、製品の「クリーニング」を実行してください。
  2. 製品のクリーンアップを実行し、プロファイリング中にストリップ リンク製品のビルド設定を一時的に「いいえ」に設定します。
  3. プロファイル アクションの構成をデバッグに設定します。
  4. 再構築する必要がない場合は、連続するプロファイルを Instruments 内から直接実行します。Mac アプリケーションを開発する場合、Instruments で GC Monitor テンプレートを使用すると、Instruments がクラッシュすることがあります。この問題を回避するには、アプリケーションを ARC に移行することを検討してください。
于 2012-11-17T22:12:44.287 に答える
0

コマンドラインから作成したos xアプリケーションにシンボルがないという同様の問題がありました(したがって、この場合はiphoneまたはxcodeの問題ではありません)。問題は、私の PATH を含む不適切な DYLD_LIBRARY_PATH が原因であることが判明しました。/usr/bin/ などのライブラリ以外のパスをすべて削除すると、うまくいきました。

于 2013-07-03T21:29:09.737 に答える
0

同じことに直面していて、このスレッドに出くわしました。

最初にリリース ビルドでアプリをプロファイリングし、同じアプリの Xcode でスキームを変更した後も、プロファイラーはまだシンボル化できないことに気付きました。上記のすべての明白な解決策を試しましたが、無駄でした。

プロファイラーは何らかの形でまだ最初のビルド (リリース ビルド) の設定を参照しているため、シンボル化できません。そのため、テスト目的でアプリのバンドル識別子を変更して、プロファイリング目的で新しいアプリが完全に作成されるようにしました。リークが存在するコードを確認できました。

試してみて、これがあなたにも当てはまるかどうか教えてください。しかし、Instruments が象徴化に失敗した理由についてはまだ考え中です。

于 2012-07-04T07:49:42.397 に答える
0

残念ながら、シンボルとバイナリが失われているサードパーティのフレームワークがたくさんあります。

さらに、アプリのバイナリが失われていました。

つまり、[ファイル] > [シンボル] を選択してターゲットをクリックし、同様の名前のアイテムを見つけた場合、バイナリ パスは赤く表示されていました。

解決策は、Instruments > Preferences > Symbols に移動/Users/<MY_USER>/Library/Developer/Xcode/DerviedDataし、検索パスに追加することでした。LibrarySpotlight によって索引付けされていません。これを行った後、少なくともアプリのシンボルを取得しました。これを行うと、アプリの名前の横にある小さな円が黄色から緑色に変わり、バイナリを手動で設定する他のソリューションとは異なり、Instruments を再起動するまで持続します。

サードパーティのフレームワーク用のすべてのものを入手する方法を教えていただければ教えてください。Carthage を使用するものもあれば、手動でインストールするものもあります。これらにはまだ運がありません。

于 2018-08-06T19:17:54.850 に答える
-1

XCode 3 と彼のオーガナイザーを開いてみてください。そして、このオーガナイザーからデバイスを両方のマシンに追加してみてください。

オーガナイザーを開いて、彼が処理するのを待ちます。「開発に使用」ボタンが表示されている場合は、彼をクリックします。

XCode 4 では、完全な開発のためにデバイスを追加できない場合があります。

于 2012-06-27T00:30:04.380 に答える