web-dev-qa-db-fra.com

Le débogueur Xcode n’affiche parfois pas de valeurs variables?

Cela m'arrive assez souvent. Par exemple, à l'heure actuelle, le débogueur est arrêté à un point d'arrêt d'une méthode. . . et il n’affiche aucune valeur de variable. D'autres fois, il en affiche certains, mais pas d'autres.

Quelqu'un peut-il expliquer?

44
William Jockusch

La raison la plus courante est que vous essayez de déboguer du code compilé avec optimisation activée et/ou aucun symbole de débogage. Cela est généralement dû au fait que vous essayez de déboguer une version Release plutôt qu’une version Debug, mais cela peut également se produire avec les versions Debug si vous avez apporté des modifications inappropriées aux paramètres de construction Debug.

Une autre possibilité moins commune est que vous avez jeté la pile.

39
Paul R

J'ai eu ce problème (en utilisant Swift), j'ai passé des années à parcourir mes engagements git pour trouver où le problème a commencé.

 xcode debugging variables not working or showing


Pour moi, j'utilisais la bibliothèque Facebook Tweaks, mais je l'importais (inutilement) à partir de mon fichier project-bridging-header.h.

Une fois que je m'en suis débarrassé, j'ai retrouvé mon débogage.

par exemple, dans mon en-tête de pontage, j'avais:

#ifndef PROJECT_Bridging_Header_h
#define PROJECT_Bridging_Header_h
// Facebook Tweaks
#import "FBTweak.h"
#import "FBTweakStore.h"
#import "FBTweakCategory.h"
#import "FBTweakCollection.h"
#import "FBTweakViewController.h"
#import "FBTweakShakeWindow.h"
#endif

J'ai supprimé toutes les importations et je l'ai simplement importé comme d'habitude dans mon AppDelegate import Tweaks.

par exemple:

#ifndef PROJECT_Bridging_Header_h
#define PROJECT_Bridging_Header_h
// Removed Facebook Tweaks
#endif

et dans mon AppDelegate.Swift

import Tweaks

Cela corrigeait tous mes problèmes de débogage, tout fonctionnait comme prévu et je pouvais aussi utiliser Facebook Tweaks.

Note: Je ne pense pas que ce soit un problème avec Facebook Tweaks lui-même, vous pouvez avoir une autre bibliothèque causant le même problème. L'idée est de supprimer les éléments de votre bridging-header un par un et de voir si vous pouvez réduire le problème.

Je pense avoir lu quelque part que, si une bibliothèque posait de nombreux problèmes en coulisse, cela pourrait empêcher votre débogueur de fonctionner.

Si cela ne vous aide pas, essayez de parcourir vos commits git et voyez à quelle étape le débogage s'est arrêté.

autres problèmes similaires sur SO:

Le débogage Xcode n'indiquant pas de valeurs

Le débogueur Xcode n'affiche pas d'informations variables après l'installation de CocoaPods Podfile

Si vous rencontrez des problèmes similaires, espérons que cela vous aidera! ????

17
Anil

Une solution possible consiste à définir le niveau d'optimisation pour votre schéma de débogage cible actuel sur aucun.

Projet -> Cible -> Paramètres de construction -> Niveau d'optimisation -> Débogage (ou ce qui convient à votre projet) -> Aucun

La source:

https://stackoverflow.com/a/14948486/3590753

8
augustos10

J'ai eu des problèmes similaires avec LLDB. Le ramener à GDB semble résoudre le problème. Évidemment, cela ne résout pas le problème, mais c’est quand même une solution de contournement.

6
IMFletcher

Vous pouvez obtenir la valeur de n'importe quelle variable dans la console en écrivant:

po name_of_an_objectCVar

ou

print name_of_a_cVar
5
Sandro Vezzali

Mon problème était que j'avais assainisseur d'adresse activé. La désactivation de sanitizer a résolu mon problème dans XCode 8.2.1

2
danielweberdlc

Si votre point d'arrêt a "Continuer automatiquement après l'évaluation des options", il n'écrira pas dans la vue variable - FYI

2
devjme

Il y a une situation dans laquelle j'ai vu où Xcode ne peut pas gérer l'optimisation de la valeur de retour (RVO) - si le compilateur décide d'appliquer RVO à une variable, celle-ci peut ne pas apparaître dans la liste des variables. Vous pouvez désactiver ceci en g ++ et clang avec l'indicateur de compilation -fno-elide-constructors

Voir aussi Comprendre les règles qui régissent c ++ 11

1
the_mandrill

Avait le même problème en utilisant Xcode 6.4 en cours d'exécution de l'application sur l'appareil. Exécuter sur simulateur affichera toutes les variables sur le panneau de variables de débogage.

1
Marcos Reboucas

Je sais que c'est vieux, mais j'ai rencontré le même problème aussi. Je ne pouvais voir aucun résumé d'objet, juste des types et du code d'adresse. Après 4 heures de lutte avec les compilateurs, les débogueurs et d'autres solutions, j'étais sur le point d'abandonner quand, par accident, j'ai trouvé cette option dans le débogueur. "Afficher les résumés". Tout en cliquant dessus, tout a été corrigé et maintenant je vois tous les résumés variables!

enter image description here

1
avuthless

Pour Swift mix OC Project utilisant pod

Le réparer en supprimant les en-têtes inutiles (qui importent avec framework par pod) xx-Bridging-Header.h

par exemple . Dans le passé, j'importais l'en-tête avec #import "GCDAsyncSocket.h" auquel j'avais été ajouté dans podfile

platform:ios, '8.0' use_frameworks! target "roocontrollerphone" do pod 'CocoaAsyncSocket' end

il suffit de l'enlever dans ce fichier xx-Bridging-Header.h

1
d0ye

J'ai compris pourquoi cela ne fonctionne pas dans XCode 4.6: toutes les variables de mon objet, self, ont été déclarées dans le fichier .m au lieu du .h. Lorsque j'ai ramené l'un d'entre eux dans le fichier .h, il est apparu dans le débogueur. Cela ressemble à un bogue avec XCode dans le sens où il ne peut pas "voir" les variables déclarées dans le fichier d'implémentation.

0
GTAE86

Si vous utilisez la fonctionnalité @property d'Objective-C 2.0, le débogueur n'affiche pas ces variables, sauf si elles sont sauvegardées par des ivars explicites dans votre interface de classe. Ceci devrait être corrigé dans Xcode 4 tel que je le comprends.

0
Stephen Watson

Je suis coincé depuis un moment avec ce problème et enfin trouver une solution . Je pense que plusieurs raisons peuvent causer ce bogue, mais dans mon cas, voici la solution . Pendant que vous êtes en position de point d'arrêt, vérifiez la valeur fournie classes . J'utilisais entre guillemets un fichier qui était localisé avec include path.

#include "MyClass.h"

au lieu de

#include <MyPorject/MyClasses/MyClass.h>

Donc, si vous avez ce problème, essayez de vérifier votre inclusion et votre importation ... Je sais que cela semble étrange, mais que cela a fonctionné pour moi et que j'ai été en mesure de le reproduire en remettant l'inclusion Double-Quote.

0
Benpaper

Vous devez désactiver deux types d'optimisations de génération dans les paramètres de construction. Par défaut, le niveau d'optimisation "Compilation Swift - génération de code" pour la construction de débogage est défini sur rapide. Vous devez définir ceci sur aucun. Vérifiez également que l'optimisation "Génération de code Apple llvm 7.1" est définie sur Aucune pour la génération de débogage. Enfin, vérifiez que vous construisez la construction de débogage dans la section "architectures" de vos paramètres de construction.

J'espère que cela t'aides.

0
Sharud Agarwal

Pour moi, cela fonctionne en changeant le contenu du panneau de variables d'affichage en Local Variables, puis de nouveau en Auto.

Cette solution a fonctionné sur XCode 6.3.2, projet de type Swift.

0
ByteArtisan

solution temporaire quand il m'est arrivé: Faites un clic droit sur la propriété passez à la définition (vous pouvez le faire manuellement et faites défiler jusqu'à @synthesize en haut du fichier)

maintenant, si la ligne est comme ceci:

@synthesize myObject = _myObject; 

positionnez le curseur de la souris sur "_myObjects". que ce qui a fonctionné pour moi .. quand j'ai des problèmes.

0
user1105951

J'ai eu le même problème et je l'ai corrigé en réinstallant tous les pods. Supprimez-les et réinstallez-les.

0
Eugene Alexeev

Une raison possible pour que le débogueur affiche des valeurs apparemment incorrect est que le type de variable est de Any?.

Par exemple.

var a: Any? = 12
var b: Int? = a as? Int // b=13483920750
var c: Int = a as? Int ?? 0 // c=1

Dans l'exemple ci-dessus, b contient la valeur correcte de 1 même si elle n'est pas affichée en tant que telle.

0
Manuel