2015-11-05 1 views
0

Je construis mon projet sur un ordinateur sur un environnement Xcode/clang, et je voudrais l'exécuter sous un débogueur lldb sur une autre station sans copier le code source , seulement les exécutables, et les fichiers de symboles.Le débogueur LLDB n'identifie pas les symboles exécutables compilés sur la machine distante

J'ai copié tous les répertoires de dSYM, de sorte que débogueur LLDB pourrait identifier les symboles dont j'ai besoin et présenter la fonction réelle (actuellement je reçois des noms de fonction comme ___lldb_unnamed_function532 sur commande backtrace)

J'ai essayé d'utiliser la commande

settings set target.source_map /source_dir /target_dir 

target_dir représente le chemin où j'ai placé tous dirs dSYM, et source_dir représente le chemin du répertoire parent d'origine de tous les dirs dSYM.

Malheureusement, cela ne fonctionne pas à moins que le code source réside sur /target_dir.

Où est-ce que je me suis trompé? Ok, donc j'ai découvert que lorsque je copie le répertoire dSYM au même endroit que les exécutables, lldb parvient à déchiffrer les symboles. est-il possible de "dire" à lldb pour un autre emplacement?

+0

Je pense que vous devriez utiliser ce DBGFileMappedPaths: http://lldb.llvm.org/symbols.html –

+0

@terencehill, il semble que ce dont j'ai besoin. Cependant, je n'ai pas pu trouver le fichier uuid qui mappe les dossiers dSYM. Savez-vous comment générer ce fichier? il devrait être sous ~/Library/SymbolCache/dsyms/uuids mais je n'ai pas de dossier SymbolCache – Zohar81

+0

Je ne sais pas mais ce post http://stackoverflow.com/questions/32506103/lldb-add-symbols-file dit à utilisez la commande: xcrun dwarfdump --uuid pour imprimer l'uuid de l'exécutable –

Répondre

2

Pour spécifier un chemin différent pour dSYM vous pouvez effectuer les étapes suivantes:

Générez d'abord l'UUID pour l'exécutable en utilisant la commande suivante:

xcrun dwarfdump chemin-exécutable --uuid

Créez ensuite le répertoire en divisant les 20 premiers chiffres hexadécimaux en blocs de 4 caractères et en créant une arborescence de répertoires: chaque répertoire suivant est créé à l'intérieur du précédent. Ensuite, créez un lien symbolique dont le nom est les 12 derniers chiffres hexadécimaux dans le répertoire le plus profond. Par exemple, si l'UUID généré est: 23516BE4-29BE-350C-91C9-F36E7999F0F1

puis effectuez les dossiers: 2351/6BE4/29BE/350C/91C9/

et le lien symbolique: F36E7999F0F1

la valeur est un chemin symlinks complet aux fichiers mach-o à l'intérieur du paquet dSYM qui contient le NAIN. Si le dSYM est dans source/foo.dSYM/Contents/Resources/DWARF/foo, alors le lien doit être le chemin complet vers source/foo.dSYM/Contents/Resources/DWARF/foo (voir l'exemple ci-dessous).

La dernière partie est de dire DebugSymbols de vérifier ce cache carte fichier UUID en utilisant:

par défaut% écrire com.apple.DebugSymbols DBGFileMappedPaths chemin à votre uuids arbre

Par exemple, vous pouvez mettre les répertoires que vous avez créés sous ~/Library/SymbolCache/dsyms/UUID/(ou où vous voulez), de sorte que le chemin d'accès complet à votre dernier lien sera: ~/Library/SymbolCache/dsyms/UUID/2351/6BE4/29BE/350C/91C9/F36E7999F0F1

Et la commande:

par défaut% écrire com.apple.DebugSymbols DBGFileMappedPaths ~/Library/SymbolCache/dsyms/uuids/

Puis vérifiez avec:

defaults read com.apple.DebugSymbols DBGFileMappedPaths

source: http://lldb.llvm.org/symbols.html, LLDB: add symbols file?

Je l'ai essayé sur mon MAC OS X:

xcrun dwarfdump --uuid ./a.out 

UUID: 7C9D0D55-3882-3F1B-99CA-446AFF4B5D0E (x86_64) ./a.out 

mkdir PAPERINO 
mv a.out.dSYM/ PAPERINO/ 

mkdir -p ~/Library/SymbolCache/dsyms/uuids/ 
mkdir -p ~/Library/SymbolCache/dsyms/uuids/7C9D0/0D55/3882/3F1B/99CA 
cd ~/Library/SymbolCache/dsyms/uuids/7C9D0/0D55/3882/3F1B/99CA/ 

ln -s ../../../<my path>/PAPERINO/a.out.dSYM/Contents/Resources/DWARF/a.out 446AFF4B5D0E 

Et enfin j'étais pouvoir lister la source dans lldb:

lldb ./a.out 
(lldb) target create "./a.out" 
Current executable set to './a.out' (x86_64). 
(lldb) source list 
    6 { 
    7  char input[40] = {'\0'}; 
    8  int count = 0; 
+0

Salut, cela a vraiment fonctionné pour moi aussi merci pour votre aide Je me demande juste si vous avez également une expérience avec le débogage à distance les fichiers dSYM contient les symboles mais j'ai aussi besoin du code pour entrer/sortir C lignes de code plutôt que l'assemblage Malheureusement, je ne peux pas mettre le code n'importe où dans la station qui exécute l'exécutable.Vous savez peut-être comment travailler avec lldb-serveur.Je n'arrive même pas à trouver le fichier d'installation ... – Zohar81

+0

n'avez aucune expérience avec le débogage à distance, cependant vous pouvez essayer de poster la question;) –