Отладчик Xcode иногда не отображает значения переменных?
Это случается со мной довольно часто. Например, прямо сейчас у меня есть отладчик, остановленный в точке останова в методе., и он не отображает никаких значений переменных вообще. В других случаях он отображает некоторые, но не другие.
Может ли кто-нибудь объяснить?
Ответы
Ответ 1
Наиболее распространенной причиной этого является то, что вы пытаетесь отлаживать код, скомпилированный с включенной оптимизацией и/или без отладочных символов. Обычно это будет связано с тем, что вы пытаетесь отлаживать сборку Release, а не сборку Debug, но это также может произойти с сборками Debug, если вы внесли неулокальные изменения в настройки сборки Debug.
Другая менее распространенная возможность заключается в том, что вы закрыли стек.
Ответ 2
У меня была эта проблема (с помощью Swift), я потратил пол, просканировавший через мои транзакции git
, чтобы найти, где была начата проблема.
![xcode отладка переменных не работает или показывается]()
Для меня я использовал библиотеку Facebook Tweaks, но я (без необходимости) импортировал ее из моего файла project-bridging-header.h
.
Как только я избавился от него, я получил отладку назад.
например, в моем заголовочном заголовке у меня было:
#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
Я удалил все импорт и просто импортировал его как обычно в моем AppDelegate import Tweaks
.
например:
#ifndef PROJECT_Bridging_Header_h
#define PROJECT_Bridging_Header_h
// Removed Facebook Tweaks
#endif
и в моем AppDelegate.swift
import Tweaks
Это фиксировало все мои отладочные проблемы, все работает так, как ожидалось, и я также могу использовать настройки Facebook.
Примечание.. Я не думаю, что это проблема с настройками Facebook, у вас может быть другая библиотека, вызывающая ту же проблему. Идея состоит в том, чтобы удалить вещи из вашего bridging-header
один за другим и посмотреть, можете ли вы сузить проблему.
Я думаю, что я где-то читал, что если библиотека вызывает много проблем за кулисами, это может остановить работу вашего отладчика.
Если это не помогает, попробуйте выполнить сканирование через git коммиты и посмотрите, на каком этапе остановлена отладка.
другие похожие проблемы на SO:
Отладка Xcode, не отображающая значения
Отладчик Xcode не отображает информацию о переменной после установки подкаста CocoaPods
Если у вас похожие проблемы, это поможет! 👍
Ответ 3
Возможное решение - установить уровень оптимизации для вашей текущей целевой схемы отладки на none.
Project → Target → Настройки сборки → Уровень оптимизации → Отладка (или что-то, что подходит вашему проекту) → None
Источник:
fooobar.com/questions/128939/...
Ответ 4
У меня были похожие проблемы с использованием LLDB. Переключение его обратно в GDB, похоже, адресовано ему. Очевидно, что это не решение проблемы, но ее обходное решение в любом случае
Ответ 5
Вы можете получить значение любой переменной в консоли, написав:
po name_of_an_objectCVar
или
print name_of_a_cVar
Ответ 6
Если ваша точка останова "автоматически продолжит после оценки параметров", то она не будет записывать в переменное представление - FYI
Ответ 7
Я знаю, что это старо, но я столкнулся с такой же проблемой. Я не мог видеть никаких резюме каких-либо объектов, просто типов и кода адреса. После 4 часов борьбы с компиляторами, отладчиками и другими решениями я собирался сдаться, когда случайно нашел эту опцию в отладчике. "Показать резюме". Просто щелкнув по нему, все исправлено, и теперь я вижу все сводки переменных!
![enter image description here]()
Ответ 8
Имел ту же самую проблему, используя Xcode 6.4, запускающую приложение на устройстве. Запуск на симуляторе покажет все переменные на панели параметров отладки.
Ответ 9
Существует ситуация, когда Xcode не справляется с оптимизацией возвращаемого значения (RVO) - если компилятор решает применить RVO к переменной, то он может не отображаться в списке переменных. Вы можете отключить это в g++ и заговорить с флагом компилятора -fno-elide-constructors
См. также Понимание правил eliding относительно С++ 11
Ответ 10
Если вы используете функцию @property Objective-C 2.0, отладчик не отображает эти переменные, если они не поддерживаются явными ivars в вашем интерфейсе класса. Это, как я понимаю, будет исправлено в Xcode 4.
Ответ 11
временное решение, когда это случилось со мной:
щелкните правой кнопкой на собственности
перейти к определению (u может сделать это вручную и прокрутить до @synthesize в верхней части файла)
теперь, если строка такая:
@synthesize myObject = _myObject;
установите курсор мыши на "_myObjects". что то, что сработало для меня... когда у меня проблемы.
Ответ 12
Я понял, почему он не работает в XCode 4.6 - все переменные в моем объекте, я, были объявлены в .m файле, а не в .h. Когда я переместил один из них обратно в файл .h, он появился в отладчике. Звучит как ошибка с XCode в том, что она не может "видеть" переменные, объявленные в файле реализации.
Ответ 13
Для меня это изменяет содержимое панели отображаемых переменных на Local Variables
, а затем обратно на Auto
.
Это решение работало над проектом XCode 6.3.2, Swift.
Ответ 14
Вам нужно отключить два типа оптимизации построения в настройках сборки. По умолчанию уровень оптимизации "быстрый компилятор - генерация кода" для сборки отладки установлен на быстрый. Вам нужно установить это на none. Также проверьте, что оптимизация "apple llvm 7.1-code generation" не установлена для сборки отладки.
Наконец, убедитесь, что вы строите сборку отладки в разделе "архитектуры" ваших настроек сборки.
Надеюсь, что это поможет.
Ответ 15
Я застрял с этой проблемой и, наконец, нашел решение.
Я думаю, что многие причины могут вызвать эту ошибку, но в моем случае это решение.
Пока вы находитесь в позиции точки останова, проверьте включенные классы.
Я включал в себя использование двойной кавычки файла, который был расположен с использованием пути include.
#include "MyClass.h"
вместо
#include <MyPorject/MyClasses/MyClass.h>
Итак, если у вас есть эта проблема, попробуйте дважды проверить свое включение и импорт.
Я знаю, что это кажется странным, но работал у меня, и я смог воспроизвести его, включив Double-Quote.
Ответ 16
Моя проблема заключалась в том, что у меня был включен дезинфицирующее средство. Отключение дезинфицирующего средства разрешило мою проблему в XCode 8.2.1
Ответ 17
Для проекта Swift mix OC, в котором используется pod
Исправить это, удалив бесполезный заголовок (который импортирует с помощью фреймворка pod) xx-Bridging-Header.h
например.
В прошлом я импортировал заголовок с #import "GCDAsyncSocket.h"
, который был добавлен в podfile
platform:ios, '8.0'
use_frameworks!
target "roocontrollerphone" do
pod 'CocoaAsyncSocket'
end
просто удалите его в этом xx-Bridging-Header.h
файле
Ответ 18
Одна из возможных причин для отладки, отображающей, по-видимому, неправильные значения, состоит в том, что тип переменной имеет значение Any?
.
например.
var a: Any? = 12
var b: Int? = a as? Int // b=13483920750
var c: Int = a as? Int ?? 0 // c=1
В приведенном выше примере b
содержит правильное значение 1
, даже если оно не отображается как таковое.