O depurador do Xcode não imprime objetos e mostra nada, quando não estão

165

O Xcode mostra um erro ao tentar imprimir um objeto po <objectName>, mas apenas para um projeto.

Captura de tela

erro: Não foi possível materializar struct: size da variável <varName> discorda do tamanho do ValueObject Ocorreu um erro no Execute, não pôde PrepareToExecuteJITExpression

O depurador do Xcode também mostra TODOS os objetos como nil( selfexcluídos), quando não são ( NSLogmostra a saída correta, como visto na imagem). Não sei o que há de errado com o projeto. Todos os outros projetos funcionam bem.

Alguma idéia do que poderia ser? (A limpeza do projeto não teve efeito.)

Binariano
fonte
Para mim, parece algum tipo de problema de apontador, mas tenho certeza de que ser honesto. O que você está tentando fazer / realizar?
usar o seguinte comando
3
O erro ocorre em todos os objetos desse projeto. Even NSStrings criou uma linha acima do ponto de interrupção!
Binarian
1
Como dito na pergunta, a limpeza não muda nada; (, mas obrigado por tentar. Adicionada a mensagem de erro.
Binarian
3
Tem certeza de que está construindo sem otimizações? (-O0)
iccir
1
As otimizações podem ser definidas não apenas nas configurações do projeto, mas também nos destinos. Houve m preso :(
manjericão

Respostas:

269

Tem certeza de que não está no "Modo de liberação"?

Para ver os valores das variáveis, você deve estar no "Modo de depuração" (clique no nome do seu projeto no canto superior esquerdo, perto dos botões iniciar / parar, depois em "Editar esquema ...", depois em "Executar" configurações e " Info ", depois" Build Configuration ". Aqui, defina" Debug ". Se estava em" Release ", é isso que você vê todos os nada).

Mick
fonte
3
Eu só tenho uma configuração, como alterar a configuração para que seja como um debug configuration?
Binarian 11/11
2
Ah, ok, criei um projeto vazio e agora posso ver todas as diferenças na Build Settingspropriedade de implantação Strip debug symbols during copydefinida como YES.
Binarian 11/11
16
@ Alex1987 Eu defini Strip debug symbols during copyto NOe o Optimization Levelto None -O0no projeto #Build Settings
Binarian
32
Infelizmente, em certas situações, o lldb faz isso no modo de depuração, com otimizações desativadas e símbolos de depuração presentes. Hora de visitar o bug report.apple.com
ctpenrose
4
Teve o mesmo problema - o nível de otimização era "Nenhum". O problema era que o LTO (Link-Time Optimization) foi definido como "Sim" também para o modo de depuração.
pi3 23/05
38

Eu configurei "Nível de otimização" para a configuração de depuração como "Nenhum" e resolveu o problema.

Leszek Zarna
fonte
2
Engraçado, isso não funcionou. Eu fiz o oposto. Eu mudei para Fastest, Smallest[-Os]e funcionou.
Nate Hat
Muitas sugestões diferentes, mas essa (definindo a otimização de depuração como Nenhuma) corrigiu isso para mim.
Dejal 21/01
29

Verifique se o Address Sanitizer está desativado nas configurações do seu esquema. O Sanitizer de endereço não funciona bem com o depurador.

  1. Vá para Editar esquema (Produto >> Esquema >> Editar esquema), escolha Executar e vá para a guia Diagnóstico.
  2. Verifique se a opção "Ativar desinfetante de endereço" está desativada.

insira a descrição da imagem aqui

KIO
fonte
4
Esta foi a solução para mim. Aparentemente, existem muitas razões pelas quais isso pode acontecer.
manroe #
16

Parece que todo mundo tem sua própria solução.

Para mim, eu uso Objective-Ce Swiftao mesmo tempo.

Primeiro de tudo, vá TARGETS -> Build Settingse pesquise ocode generation

Você encontrará Apple LLVM 6.0 e Swift Compiler

Mude Optimization Leveltudo para None, então Debug, você pode encontrar o valor nãonil

Surpreendentemente, depois de ver o valor, você resolve esse problema permanentemente e pode mudar o Optimization Levelque costumava ser.

LeiHao
fonte
11

Existem outras maneiras de isso ocorrer. Para mim, foi porque o valor "Other C Flags" foi definido como "-O2", mesmo para a compilação de depuração. Desativar isso para a compilação de depuração resolveu o problema.

ThomasW
fonte
9

Saída de depuração filtrada

Para mim, o Xcode estava filtrando a saída do depurador. Verifique se a configuração de saída é Saída do depurador ou Todas as saídas

Curmudgeonlybumbly
fonte
6

Acabei de encontrar esse problema e descobri que era por causa Deployment Postprocessing = YESdas configurações de compilação.

Alterando isso para NOcorrigi-lo, como visto na captura de tela abaixo:

insira a descrição da imagem aqui

Versão Xcode: 6.0.1 (6A317) no OSX 10.9.5

Lucas
fonte
5

Acabei de encontrar um problema semelhante: a certa altura, o depurador do Xcode imprimiu alguns tipos de objetos, especialmente os NSStrings como (null), embora tenham sido inicializados com um valor. Impresso via

NSLog(@"String value: %@", myString);

o valor correto para o objeto foi mostrado.

Confuso! Resolver o problema foi bastante fácil: desliguei o Xcode e reiniciei o computador. Depois que reiniciei o Xcode, tudo funcionou bem novamente :).

Torsten Barthel
fonte
5

Verifique se o Link-Time Optimization = Nomodo de depuração nas configurações de compilação.

llama591
fonte
Eu apenas encontrei esse problema no Xcode 8 apenas nas configurações da minha estrutura dinâmica! Thx
vmeyer
3
  1. Excluir dados derivados
  2. Completamente Xcode / Restart
  3. Projeto Limpo

Isso é tudo o que preciso para mim.

TMin
fonte
2

As soluções aqui também corrigem o erro que você vê error: <EXPR>:1:1: error: use of unresolved identifiertoda vez que tenta pouma variável.

Para mim, a solução foi Build Settingsprocurar Optimization Levele garantir que cada Debugconfiguração estivesse definida None.

Kevin Xu
fonte
Isso realmente consertou para mim. Alguma idéia de qual é a desvantagem de desativar a configuração?
Jasper #
1

Vá para "Outros sinalizadores C" na configuração de compilação e defina o valor de depuração de -o2 a -O0

Shauket Sheikh
fonte
0

Eu corri para isso também e quando descobri que estava no modo de lançamento, mudei para depuração ... sem correção. Acontece que eu tive que fazer uma limpeza primeiro (cmd + shift + k).

Então, acho que o que acontece é que, depois do modo de lançamento integrado, nem tudo é recompilado no desenvolvimento e, portanto, o lldb não consegue ler corretamente os símbolos. Depois de limpar e recompilar o desenvolvimento, funcionou para mim.

Spencer Hall
fonte
-3

A realidade é que o sistema deve funcionar imediatamente e não devido a links para uma quantidade múltipla de configurações diferentes, a um ponto em que as coisas podem funcionar para você ou não.

Por que o sistema não permite sempre a depuração quando no modo de depuração é um mistério que apenas a Apple pode responder (se eles se importaram, o que ultimamente eu duvido).

Afinal, a diferença entre depuração / não depuração seria tabelas extras com metadados que preenchem apenas memória / espaço em disco.

Se você estiver compilando diretamente com o simulador ou um dispositivo, não se importará com esses megabytes extras.

Portanto, precisamos executar loops extras para fazer uma coisa muito básica e simples que todos os ides que eu conheço desde o século passado funcionam bem.

E para adicionar, para mim, o que funcionou foi alterar em "Depurar" a Otimização do Tempo de Link de "Monolítico" para "Não" (xcode 8).

kindaian
fonte
Xcode = No gerenciador de pacotes para fora da caixa, autocomplete e outras características do trabalho da vontade, tempos de compilação são enormes, etc.
zirinisp