po LLDB avec swift
Comment puis-je définir valeur de la variable dans une Swift App avec LLDB?
Plus tôt, il était comme po variable_name
Maintenant j'ai l'habitude de les obtenir à de méchants erreur, comme:
(lldb) po a
error: <EXPR>:11:5: error: use of unresolved identifier '$__lldb_injected_self'
$__lldb_injected_self.$__lldb_wrapped_expr_2(
^
- Yep, le débogage dans Swift est actuellement tributaire de l'
println
. - J'ai eu un semblable débogueur erreur qui a eu lieu lors de la tentative d'inspecter
let
constantes; voir ma question à ce sujet here—il s'est avéré être un bug dans Xcode 6. - Il semble y avoir un appel pour les exemples de code / projets qui présentent ces problèmes, de personne(s) de l'équipe du compilateur: devforums.apple.com/message/1106278#1106278 . Toute contribution à cette cause serait sûrement être apprécié par tous (et serait très certainement être un super-bonne-gaillard)
- J'ai fait quelques tests avec l'actuel Xcode et rapide des essais d'impression avec l'objet. Peut-être que ce sera utile en quelque sorte.
Vous devez vous connecter pour publier un commentaire.
Que l'erreur semble que cela pourrait être parce que le NAIN n'est pas de raconter LLDB où trouver votre "soi" de l'objet. Compte tenu de la nature de Swift, LLDB besoins de connaître le type de l'auto afin d'être en mesure d'injecter une expression à l'intérieur de votre portée locale
Un seul moyen de savoir si c'est votre problème est de le faire à la LLDB invite:
(lldb) cadre variable L auto
Vous allez probablement voir pas un endroit pour elle. Convient de déposer un rapport de bug pour, juste pour suivre votre cas de reproduction de
De toute façon, pour arriver à l'essentiel de votre question. En Swift, il n'y a pas de langue sanctionné mécanisme de "description d'impression" comme pour ObjC, ainsi tandis que vous pouvez taper "po soi", à moins que l'autonomie est un Objectif de type C, vous allez assez bien voir la même chose que "p auto" ou même "image variable auto" vous dira - qui est entièrement basé sur le LLDB de données de formateurs mécanisme. Si vous voulez connecter afin de personnaliser la façon dont votre Swift des objets, l'obligation de référence est: http://lldb.llvm.org/varformats.html
J'ai fait quelques essais pour comprendre comment il fonctionne avec Swift, les résultats m'a un peu surpris. Avec ObjC objets
po
appelsdebugDescription
qui, par défaut, les appelsdescription
. C'est clair. Malheureusement, ceci ne s'applique pas pendant le travail avec Swift classes. Je me suis concentré sur les objets plutôt que sur l'impression des variables simples.Pour qu'il fonctionne (
po
commande enlldb
) j'ai eu à remplacer la description. Ci-dessous le code que j'ai utilisé pour le test:Test:
La chose qui m'a surpris, c'est que
po
sur Swift objets des appelsdescription
plutôt quedebugDescription
qui diffère de ObjC.MODIFIER
Pour le faire agir comme avec ObjC, de Votre classe ont à mettre en œuvre CustomDebugStringConvertible et puis
po
appelleradebugDescription
, qui, par défaut, les appelsdescription
. La seule chose qui doit être changé dans mon exemple serait d'ajouter:Référence
Vérifié avec
XCode 7.0.1
etiOS SDK 9
,Swift 2.0
Je peux confirmer la même erreur, pour Xcode beta4, et
image variable L auto
affiche quelque chose, mais semble pire:
: (SwiftCollectionViewSample.DetailViewController) auto =
Je vais définitivement déposé un bug, Enrico
17819707 débogueur imprime erreur: utilisation de suspens identificateur '$__lldb_injecté_auto'
De grandes réponses dans cette page à propos de swift défaut de retour de la
description
lors de l'exécution delldb) po
Si elle permet, lors de la frappe d'erreurs avec lldb et rapide d'objets, j'ai toujours essayé d'être dans un bon endroit.
Tout d'abord, dites lldb vous êtes dans un contexte Swift (pas Objective-C):
(lldb) settings set target.language swift
Puis je serais toujours double-vérifier que j'avais importé le Cadre..