J'ai écrit du code qui transfère tous les ivars d'une classe dans un dictionnaire dans l'objectif C. Cela utilise valueForKey:
pour obtenir les données de la classe. Parfois, KVC lève une exception interne qui est également capturée correctement - mais cela perturbe la fonctionnalité de lldb et tout ce que j'obtiens est:
erreur: l'exécution a été interrompue, raison: point d'arrêt d'exception ObjC interne (-3) .. Le processus a été remis à l'état avant l'évaluation de l'expression.
Aucun point d'arrêt n'est défini. J'ai même essayé avec -itrue -ufalse
comme options d'expression, mais cela ne fait aucune différence. Cela échoue totalement pour ce que je veux utiliser lldb, et cela semble être un problème si minuscule. Comment puis-je apporter clang simplement ignorer s'il existe des exceptions ObjC internes et capturées lors de l'appel d'une méthode?
J'ai essayé cela à la fois dans Xcode et directement via l'appel de clang depuis le terminal et la connexion à un serveur de débogage distant - aucune différence.
J'ai rencontré le même problème. Ma solution était d'envelopper un try/catch
autour (j'utilise ce code uniquement pour le débogage). Voir: DALIntrospection.m ligne # 848
NSDictionary *DALPropertyNamesAndValuesMemoryAddressesForObject(NSObject *instance)
Ou, si vous utilisez iOS 7
, la méthode d'instance privée _ivarDescription
affichera tous les ivars
pour vous (des méthodes d'instance similaires sont _methodDescription
et _shortMethodDescription
).
J'ai rencontré le même problème.
Ma solution est simplement alloc init
la propriété avant de l'affecter à la valeur qui a provoqué le crash.
Moi-même et mes collègues avons rencontré cela aujourd'hui, et nous avons finalement trouvé une solution de contournement en utilisant l'API python python. La méthode manuelle consiste à exécuter script
et à saisir:
options = lldb.SBExpressionOptions()
options.SetTrapExceptions(False)
print lldb.frame.EvaluateExpression('ThisThrowsAndCatches()', options).value
Cela pourrait être intégré à sa propre commande via command script add
.