Подтвердить что ты не робот

Отладчик Xcode иногда не отображает значения переменных?

Это случается со мной довольно часто. Например, прямо сейчас у меня есть отладчик, остановленный в точке останова в методе., и он не отображает никаких значений переменных вообще. В других случаях он отображает некоторые, но не другие.

Может ли кто-нибудь объяснить?

4b9b3361

Ответ 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, даже если оно не отображается как таковое.