65

コマンド ライン経由で IPhone アプリケーションをコンパイルしています (XCode オプションは含まれていません)。Instruments でプロファイリングするときにシンボル名を表示できません。-gdawrf-2 や -g などのいくつかのフラグを試しましたが、成功しませんでした。また、dsymutils を使用して .dSYM ファイルを生成しようとしましたが、それをどのように使用するのか見当もつかないため、同様に失敗しました。

どんな助けでも大歓迎です!

4

11 に答える 11

107

ビルド中に dSYM ファイルを含めないようにプロジェクト設定を変更しました。

ここに画像の説明を入力

dSYM ファイルを含めるように変更すると、プロファイラーがシンボルを逆シンボル化するのに役立ち、問題が修正されました。

ここに画像の説明を入力

于 2015-03-20T08:03:49.273 に答える
66

私はまだこれに問題を抱えていました。

私の問題は、生成された dSYM ファイルを確認できたのに、Instruments がそれを取得していないことでした。

これを修正するには、次の手順を実行します。

  1. dSYM ファイルを見つけます (~/Library/Developer/DerivedData/APP_NAME-XXXXXXX/Build/Products/[BUILD_TYPE]-[DEVICE-TYPE]/ にあります)。
  2. 計測器を停止した状態で、[ファイル] -> [ドキュメントの再記号化] をクリックします。
  3. アプリ名のエントリまで下にスクロールします
  4. [検索] をクリックし、手順 1 のフォルダーを選択します。
  5. [開始] ボタンをクリックしてプロファイリングを開始します
于 2011-10-20T17:47:27.590 に答える
39

Instruments がデバッグ情報を取得する方法:

計測器は、[デバッグ シンボルの生成] オプション ボックスのチェックマークと組み合わされた dSYM ファイルを使用して [デバッグ情報形式] を [DWARF] に設定すると、通常は XCode によって自動的に生成される .dSYM ファイルからデバッグ情報を取得します。これらのオプションを設定すると、XCode ビルド プロセスに追加の手順が追加され、アプリケーションのコンパイル後に dSYM ファイルが生成されます。すべての dSYM は、派生元のバイナリの Mach-O セクションの UUID に対応する UUID を使用して構築されます。Spotlight インポーターは、Mac 上の Spotlight でアクセス可能な場所にあるすべての dSym ファイルの UUID をインデックス化します。したがって、SPOTLIGHT はすべてのブラック マジックを実行し、実行中の .app とそれに対応する .dSYM ファイルとの間のリンクを作成します。

XCode を使用せずにデバッグ情報と dSYM ファイルを生成する方法:

–gdwarf-2 および -g フラグを使用してコンパイルしていることを確認してください。(他のフラグの組み合わせが機能する場合もあります)

-g オペレーティング システムのネイティブ形式 (stabs、COFF、XCOFF、または DWARF 2) でデバッグ情報を生成します。GDB は、このデバッグ情報を処理できます。stabs 形式を使用するほとんどのシステムでは、-g により、GDB のみが使用できる追加のデバッグ情報を使用できるようになります。この追加情報により、GDB でのデバッグ作業が改善されますが、他のデバッガーがクラッシュしたり、プログラムの読み取りを拒否したりする可能性があります。追加情報を生成するかどうかを確実に制御したい場合は、-gstabs+、-gstabs、-gxcoff+、-gxcoff、または -gvms (以下を参照) を使用します。GCC では、-g を -O とともに使用できます。最適化されたコードが取ったショートカットは、驚くべき結果をもたらすことがあります。制御フローは、予期しない場所に一時的に移動する可能性があります。一部のステートメントは、一定の結果を計算するため、またはそれらの値が既に手元にあるために実行されない場合があります。一部のステートメントは、ループの外に移動されたため、別の場所で実行される場合があります。
それでも、最適化された出力をデバッグできることが証明されています。これにより、バグがある可能性のあるプログラムに対してオプティマイザーを使用することが合理的になります。

-gdwarf-2 DWARF バージョン 2 形式でデバッグ情報を生成します (サポートされている場合)。これは、IRIX 6 の DBX で使用される形式です。このオプションを使用すると、GCC は DWARF バージョン 3 の機能が有用な場合に使用します。バージョン 3 はバージョン 2 との上位互換性がありますが、古いデバッガーでは依然として問題が発生する可能性があります。

dsymutil を使用して dSYM ファイルを生成します。コマンド ラインでツールが認識されない場合は、スポットライトを使用して検索します。重要: ネットワーク ドライブで作業している場合は、dSYM を生成する前に .app ファイルを Mac HD に配置します。

dsymutil MyApp.app/MyApp -o MyApp.app.dSYM

.dSYM ファイルを Mac のローカル ドライブに置き、通常どおり Instruments を実行します。

Resettig スポットライトのインデックス作成:

シンボルが表示されない場合は、spotlight にバグがある可能性があります。dSYM ファイル (またはドライブ) を含むフォルダーをスポットライト設定の「スポットライトがこれらの場所を検索しないようにする」に追加し、すぐに削除することで、スポットライトのインデックス作成をリセットすることができます。

于 2010-05-20T18:55:16.430 に答える
15

Xcode 4.5 では、デバッグ ビルドまたはリリース ビルドからプロファイリングすることを選択できます。リリースは、デバイスにコピーされたときにシンボルを削除するようにデフォルト設定されています。リリース構成を壊すことなく、プロファイリングのためにデバッグ構成に切り替えるのは非常に簡単です。これを行うには、XCode メニューから Product -> Edit Scheme を選択します。表示されるスキームのリストから「プロファイル」を選択し、そのための正しいビルド構成を選択します。

または、別のリリース/プロファイル構成を作成し、それをスキームのプロファイル セクションで使用することもできます。別のビルド構成を追加する方法は、XCode ユーザー ガイドに記載されています。

于 2012-11-13T11:23:30.783 に答える
6

Xcode 6 Instrumentsを使用すると、次のようにdSYMファイルを提供できます。

  • File -> Symbols...メニュー (プロファイリング停止時)
  • アプリを選択し、検索ボタンを押します
  • dSYM を含むパスを選択します (通常は~/Library/Developer/DerivedData/APP_NAME-XXXXXXX/Build/Products/[BUILD_CONFIGURATION]-[TARGET_PLATFORM]/ )。ヒント:ターミナルからこのパスをコピーして⌘+SHIFT+G、ダイアログで OS X ショートカットを使用できます。

また、 Instrumentsは、今後このアプリの dSYM をロードするために、選択したパスを使用する必要があるかどうかを尋ねます。はいと答えてください:)

于 2015-02-19T09:50:16.950 に答える
6

Xcode 7.1/7.3 でこれを理解しようとして 3 日間を費やしました...

展開ターゲットを最新バージョン (当時は 9.3) に変更すると、この問題が修正されました。私の会社は 7.0 をターゲットにしているので、製品リリースを行うときにターゲットを変更する必要がないように (またはターゲットを変更し忘れないように)、Instruments でコードをプロファイリングするためのカスタム スキームを作成する必要があるでしょう。

展開ターゲットに基づいて dSYM が機能しない場合は、おそらくバグのようですか?

于 2016-05-05T16:27:40.523 に答える
2

問題は、スポットライトが .dSYM ファイルを見つけられないことです。これは、Apple が DerivedData フォルダーの場所を変更したためです。DerivedData は ~/Library に入ります

Spotlight は ~/Libraryのインデックスを作成しません。また、私が確認した限りでは、インデックスを作成することもできません(たとえば、mdimport は無視されます)。

プロファイラーでシンボルを取得するための回避策は、データを ~/Library の外に単純にコピーすることです。たとえば、ホーム ディレクトリで問題ありません。

このコマンドラインを使用しました:

$ cp -r ~/Library/Developer/Xcode/DerivedData/AppName-xxxxxxxxxxx/Build/Products/Release-iphoneos/ ~/

プロファイラーを強制終了し、新しいプロファイルの実行を開始すると、シンボルが再び利用可能になることがわかります。

于 2011-10-05T20:07:53.880 に答える
1

Xcode 4 に付属するバージョンの Instruments での別の回避策は、Instruments の [ファイル] メニューの下にある [ドキュメントの再記号化] メニュー項目を使用することです。このメニュー項目を使用すると、~/Library/... ディレクトリの .dSYM ファイルにあるシンボルを使用できます。

于 2011-10-08T11:49:33.720 に答える
1

ビルド ログを確認し、-gスイッチがコンパイラに到達していることを確認します。さまざまなビルド構成などのプロジェクト レベルやターゲット レベルで設定を変更するときに、これを間違えるのは簡単です。

于 2010-05-05T20:54:43.717 に答える
0

XCode プロジェクトが、Spotlight が dSYM ファイルを見つけられないネットワーク共有上にあったため、この問題が発生しました。ローカル ドライブにあることを確認します。

于 2010-05-27T21:11:10.213 に答える