it-swarm.com.de

Fehlende Symbolnamen beim Profilieren der IPhone-Anwendung mit Instrumenten

Ich kompiliere eine IPhone-Anwendung über die Befehlszeile (daher sind keine XCode-Optionen beteiligt) und ich kann meine Symbolnamen nicht anzeigen, wenn Sie mit Instrumenten ein Profil erstellen. Ich habe mehrere Flaggen wie -gdawrf-2 und -g ohne Erfolg ausprobiert. Ich habe auch versucht, dsymutils zu verwenden, um eine .dSYM-Datei zu generieren, aber ich habe keine Ahnung, wie ich es verwenden soll, damit es auch fehlschlägt.

Jede Hilfe wird sehr geschätzt!

55
Mac Twist

So erhält Instruments Debug-Informationen: 

Instruments erhält Debug-Informationen aus einer .dSYM-Datei, die normalerweise automatisch von XCode generiert wird, wenn das Debug-Informationsformat auf DWARF mit dSYM-Datei in Kombination mit einem Häkchen im Optionsfeld Generate Debug Symbols gesetzt wird. Durch das Festlegen dieser Optionen wird dem XCode-Erstellungsprozess ein zusätzlicher Schritt hinzugefügt und eine dSYM-Datei erstellt, nachdem die Anwendung kompiliert wurde. Jedes dSYM verfügt über eine UUID, die einer UUID in einem Mach-O-Abschnitt in der Binärdatei entspricht, von der es abgeleitet ist. Ein Spotlight-Importer indiziert die UUIDs aller dSym-Dateien, die sich an einem auf Spotlight zugänglichen Speicherort auf Ihrem Mac befinden. Daher führt SPOTLIGHT alle schwarzen Zauber aus und ist dafür verantwortlich, die Verbindung zwischen der von Ihnen ausgeführten .app-Datei und der entsprechenden .dSYM-Datei herzustellen. 

So generieren Sie Debug-Informationen und dSYM-Dateien ohne XCode: 

Stellen Sie sicher, dass Sie mit -gdwarf-2 und -g-Flags kompilieren. (Andere Flagkombinationen funktionieren möglicherweise.) 

-g Produzieren Sie Debugging-Informationen in das native Format des Betriebssystems (Stiche, COFF, XCOFF oder DWARF 2). GDB kann mit diesem Debugging arbeiten Information. Auf den meisten Systemen, die .__ verwenden. stabs format, -g ermöglicht die Verwendung zusätzlicher Debugging-Informationen, die nur GDB Kann benutzen; Diese zusätzliche Information macht Debugging funktioniert besser in GDB, wird aber machen wahrscheinlich andere Debugger zum Absturz bringen oder das Programm nicht lesen. Wenn du sicher steuern wollen, ob Erzeugen Sie die zusätzlichen Informationen, verwenden Sie -gstabs +, -gstabs, -gxcoff +, -gxcoff oder -gvms (siehe unten). GCC erlaubt Sie verwenden -g mit -O. Die Verknüpfungen von optimiertem Code genommen werden kann gelegentlich überraschend produzieren Ergebnisse: Einige Variablen, die Sie deklariert haben kann überhaupt nicht existieren; Kontrollfluss kann sich kurz bewegen, wo Sie nicht waren erwarte es; Einige Aussagen können nicht .__ sein. ausgeführt, weil sie berechnen konstante Ergebnisse oder ihre Werte waren schon zur hand einige Aussagen können An verschiedenen Stellen ausführen, da Sie wurden aus Schleifen gerückt.
Trotzdem ist es möglich, Debug-optimierte Ausgabe. Das macht es sinnvoll, den Optimierer für .__ zu verwenden. Programme, die Fehler enthalten könnten. 

-gdwarf-2 Produzieren Sie Debugging-Informationen im DWARF-Format der Version 2 (wenn das unterstützt wird). Dies ist das Format, das von DBX unter IRIX 6 verwendet wird. Mit Bei dieser Option verwendet GCC die Funktionen von DWARF Version 3, wenn sie nützlich sind; Version 3 ist aufwärtskompatibel mit Version 2, kann jedoch immer noch __. Probleme für ältere Debugger.

Generieren Sie eine dSYM-Datei mit dsymutil. Wenn das Tool in der Befehlszeile nicht erkannt wird, suchen Sie es mit Spotlight . WICHTIG: Platzieren Sie die .app-Datei auf Ihrem Mac HD, bevor Sie das dSYM generieren, wenn Sie an einem Netzwerklaufwerk arbeiten.

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

Legen Sie die .dSYM-Datei auf das lokale Laufwerk des Macs und führen Sie Instruments wie gewohnt aus. 

Resettig Spotlight Indexierung: 

Wenn keine Symbole angezeigt werden, kann dies daran liegen, dass spotligh fehlerhaft ist. Sie können versuchen, die Indexierung von Spotlight zurückzusetzen, indem Sie Ihren Ordner, der die dSYM-Datei (oder sogar Ihr Laufwerk) enthält, unter "Spotlight die Suche nach diesen Orten verhindern" in den Spotlight-Einstellungen hinzufügen und dann sofort entfernen. 

34
Mac Twist

Ich habe meine Projekteinstellungen geändert, um die dSYM-Datei beim Erstellen nicht aufzunehmen:

enter image description here

Das Ändern der Datei durch Einfügen der dSYM-Datei half dem Profiler, die Symbole zu desymbolisieren und mein Problem zu beheben:

enter image description here

81
Antoine

Ich hatte immer noch Probleme damit. 

Mein Problem war, dass ich die erzeugte dSYM-Datei sehen konnte, aber Instruments hat sie nicht erkannt.

Um dies zu beheben, führen Sie folgende Schritte aus:

  1. Suchen Sie Ihre dSYM-Datei (sollte sich in ~/Library/Developer/DerivedData/APP_NAME-XXXXXXX/Build/Products/[BUILD_TYPE] - [DEVICE-TYPE]/befinden.
  2. Klicken Sie bei gestoppten Instrumenten auf Datei -> Dokument erneut symbolisieren
  3. Blättern Sie nach unten zum Eintrag mit Ihrem App-Namen
  4. Klicken Sie auf "Locate" und wählen Sie den Ordner aus Schritt 1 aus
  5. Klicken Sie auf die Schaltfläche Start, um mit der Profilerstellung zu beginnen
59
youdonotexist

In Xcode 4.5 können Sie Profil von Debug- oder Release-Builds auswählen. Bei der Standardeinstellung werden die Symbole beim Kopieren auf das Gerät entfernt. Es ist sehr einfach, zur Debug-Konfiguration für die Profilerstellung zu wechseln, ohne die Release-Konfiguration zu beschädigen. Wählen Sie dazu im XCode-Menü Produkt -> Bearbeitungsschema. Wählen Sie "Profil" aus der Liste der angezeigten Schemata aus und wählen Sie dann die richtige Build-Konfiguration aus.

Sie können auch eine separate Release-/Profilkonfiguration vornehmen und diese in Ihrem Profilabschnitt Ihres Schemas verwenden. Wie Sie eine separate Build-Konfiguration hinzufügen, ist im XCode User Guide beschrieben.

15
Matt Connolly

Verbrachte drei Tage damit, dies für Xcode 7.1/7.3 herauszufinden ...

Durch das Ändern des Implementierungsziels auf die neueste Version (damals 9.3) wurde dieses Problem für mich behoben. Mein Unternehmen zielt auf 7.0, so dass ich wahrscheinlich ein benutzerdefiniertes Schema erstellen muss, um den Code in Instruments zu profilieren, um zu vermeiden, dass das Ziel geändert werden muss (oder vergessen wird, das Ziel zu ändern), wenn wir eine Produktionsversion veröffentlichen.

Scheint, als wäre es wahrscheinlich ein Fehler, wenn dSYMs nicht auf der Basis des Implementierungsziels funktionieren?

5
Jason Rice

Mit Xcode 6 Instruments können Sie dSYM file wie folgt bereitstellen:

  • Datei -> Symbole ... Menü (wenn die Profilerstellung gestoppt ist) 
  • wählen Sie Ihre App aus und drücken Sie die Taste Locate  
  • wählen Sie den Pfad aus, der dSYM enthält (normalerweise ~/Library/Developer/DerivedData/APP_NAME-XXXXXXX/Build/Products/[BUILD_CONFIGURATION] - [TARGET_PLATFORM]/). Tipp: Sie können diesen Pfad vom Terminal kopieren und die OS X-Verknüpfung ⌘+SHIFT+G im Dialog verwenden.

Außerdem werden Sie von Instruments gefragt, ob der ausgewählte Pfad verwendet werden soll, um zu versuchen, in Zukunft dSYM für diese App zu laden. Antworte ja :)

4
Anton Gaenko

Das Problem ist, dass spotlight die .dSYM-Dateien nicht finden kann. Dies liegt daran, dass Apple den Speicherort des DerivedData-Ordners geändert hat. Die DerivedData wird jetzt in ~/Library gespeichert

Spotlight kann ~/Library nicht indexieren und soweit ich es feststellen konnte, ist kann nicht zum Indizieren gemacht werden (beispielsweise wird mdimport ignoriert).

Um die Symbole in Ihrem Profiler abzurufen, müssen Sie einfach die Daten außerhalb von ~/Library kopieren kopieren, z. Ihr Heimatverzeichnis wird gut funktionieren.

Ich habe diese Befehlszeile verwendet:

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

Wenn Sie Ihren Profiler beenden und einen neuen Profillauf starten, werden Sie sehen, dass die Symbole wieder verfügbar sind.

2
Bram

Überprüfen Sie das Build-Protokoll, und stellen Sie sicher, dass Ihr -g-Schalter den Compiler erreicht. Dies kann leicht falsch gemacht werden, wenn Sie Einstellungen auf Projekt- und/oder Zielebene für verschiedene Build-Konfigurationen usw. ändern.

1
Paul R

In der Version von Instruments, die im Lieferumfang von Xcode 4 enthalten ist, können Sie den Menüpunkt Re-Symbolicate Document im Menü File (Datei) für Instruments verwenden. Mit diesem Menüpunkt können Sie die Symbole verwenden, die sich in der .dSYM-Datei im Verzeichnis ~/Library/... befinden.

1
pmb

Nach meiner Erfahrung liegt dies normalerweise daran, dass "Profile" aufgerufen wurde, bevor die zuletzt geänderte Version der App auf dem Zielgerät installiert wurde.

Versuchen Sie, die App auf dem Gerät/target auszuführen, und rufen Sie nach der Neuinstallation erneut "Profile" auf.

1
Ben Guild

Ich habe dieses Problem erhalten, weil das XCode-Projekt auf einer Netzwerkfreigabe war, in der Spotlight die dSYM-Dateien nicht finden konnte. Stellen Sie sicher, dass es sich auf dem lokalen Laufwerk befindet.

0

Ich habe eine "Profil" -Konfiguration erstellt, um dieses Problem zu beheben. Siehe meine Antwort zu einer ähnlichen Stackoverflow-Frage.

0
fishinear