Por que meus pontos de interrupção não estão funcionando?

112

Eu tenho pontos de interrupção definidos, mas o Xcode parece ignorá-los.

AlanKley
fonte
2
ProdutoLimpeza me ajudou
Alexander Bekert
Eu tive que reiniciar meu computador completamente para fazê-los funcionar novamente, e agora eles estão com muitos bugs. Estou usando o xcode 10.2.1.
llamacorn
2
Xcode 11, reiniciar e limpar o Xcode não funciona, reiniciar o Mac não funcionando. Exclua o aplicativo no dispositivo e reconstrua corrige esse problema. Espero que ajude alguém
Randall Wang,

Respostas:

148

Primeiro de tudo, eu concordo 100% com o pessoal anteriores que diziam transformar OFF Load Symbols Lazily .

Tenho mais duas coisas a acrescentar.

(Minha primeira sugestão parece óbvia, mas a primeira vez que alguém sugeriu para mim, minha reação foi mais ou menos assim: "vamos lá, por favor, você realmente acha que eu não saberia melhor ...... oh.")

  1. Certifique-se de não ter definido acidentalmente "Configuração de build ativa" como "Versão".

  2. Em "Alvos" na exibição da árvore gráfica do seu projeto, clique com o botão direito do mouse no Alvo e selecione "Obter informações". Procure uma propriedade chamada "Generate Debug Symbols" (ou similar) e certifique-se de que esteja CHECKED (aka ON). Além disso, você pode tentar encontrar (também em Target >> Get Info) uma propriedade chamada "Debug Information Format" e defini-la como "Dwarf with dsym file".

Existem várias outras propriedades em Destino >> Obter Informações que podem afetá-lo. Procure coisas como otimizar ou compactar código e DESLIGUE essas coisas (presumo que você esteja trabalhando em modo de depuração, de modo que este não é um mau conselho). Além disso, procure itens como símbolos de remoção e certifique-se de que também esteja DESLIGADO. Por exemplo, "Strip Linked Product" deve ser definido como "No" para o destino de Depuração.

pestófago
fonte
8
No XCode 4.5.2 eu tive esse problema e ele acabou sendo porque eu habilitei a "Otimização de tempo de link", então isso é outra coisa a verificar
taxilian
6
Para alterar a configuração de compilação, vá para Produto -> Esquema -> Editar esquema, em Executar - Informações. Para mim, o que funcionou foi marcar "Debug Executable" nesse menu.
Jeffrey Sun,
2
Sequestrar a resposta principal para adicionar que a sintaxe do Bison parece ser outra causa (exótica) de pontos de interrupção que não funcionam (veja minha resposta abaixo). Espero que economize algum tempo para a próxima pessoa com esse problema.
Dave
2
Também é muito fácil alternar inadvertidamente a ativação do ponto de interrupção com ⌘Y. Portanto, tomem cuidado com isso, crianças.
dsgrnt
1
Tentei o ponto número 1 e funcionou para mim. Realmente me ajudou. Votado.
NSPratik
49

No Xcode 7, o que funcionou para mim foi:

1) Certifique-se de que o destino -> esquema -> Executar - está no modo de depuração (era Release)

2) Certifique-se de marcar a opção "Depurar executável" veja abaixo:

insira a descrição da imagem aqui

Oded Regev
fonte
4
Isso é exatamente o que aconteceu comigo, a caixa de seleção estava desmarcada
anoop4real
O mesmo problema para mim. Essa opção não deveria ser habilitada por padrão (XCode 8.3)? Não devemos ser todos desenvolvedores, dispostos a depurar de qualquer maneira?
dgmz
Funcionou para mim no Xcode 9.3, seria ótimo se você fornecesse outra imagem para a opção 1.
Kazi Abdullah Al Mamun
24

Vá para as preferências de depuração do Xcode. Certifique-se de que "Load Symbols lazily" NÃO esteja selecionado.

AlanKley
fonte
7
Infelizmente não há preferências de "depuração" no Xcode 6 e "preguiçosamente" não aparece na documentação. Suspiro.
Oscar
1
Certo, agora não consigo encontrar a opção 'Carregar Símbolos Preguiçosamente' no XCode 6
RNA
14

Eu estava tendo o mesmo problema (de novo). Depois de verificar três vezes "Carregar símbolos preguiçosamente" e remover e depurar sinalizadores de geração de informações, fiz o seguinte:

  1. sair do Xcode
  2. abra uma janela de terminal e cd para o diretório do projeto
  3. cd para o diretório .xcodeproj
  4. exclua tudo, exceto o arquivo .pbxproj (eu tinha frank.mode1v3 e frank.pbxuser)

Você pode realizar a mesma tarefa no localizador clicando com o botão direito / opção no pacote .xcodeproj e selecionando "Mostrar conteúdo do pacote".

Quando reiniciei o Xcode, todas as minhas janelas foram redefinidas para as posições padrão, etc, mas os pontos de interrupção funcionaram!

Frank Szczerba
fonte
2
Isso funciona, mas exclui todas as suas preferências ... Isso deve ser feito quando nada mais funcionou.
Rémi Doolaeghe
funcionou para mim, obrigado. Eu me pergunto por que o Xcode é uma merda tanto. Xcode é o pior software já escrito pela Apple.
Pato de
Uau, isso tem 5 anos. É difícil acreditar que ainda funciona e que ainda é um problema!
Frank Szczerba
não funcionou para mim. Estou executando o Xcode 6.01. Agora, quando eu construo, recebo vários erros de arquivo ausente. Estou revertendo meu código para resolver.
Native_Mobile_Arch_Dev
Só tive que reiniciar o Xcode, meu caso foi devido ao git versioning, ao confirmar os dados de estado da interface do usuário do xcode.
Juan Boero
13

Para Xcode 4.x: Vá para Product> Debug Workflow e desmarque "Show Disassembly When Debugging".

Para o Xcode 5.x, vá para Debug> Debug Workflow e desmarque "Show Disassembly When Debugging".

bneupaane
fonte
11

Outra razão

Definido DeploymentPostprocessingcomo NÃO em BuildSettings - detalhes aqui

Em resumo -

A ativação dessa configuração indica que os binários devem ser removidos e o modo de arquivo, o proprietário e as informações do grupo devem ser definidos para valores padrão. [DEPLOYMENT_POSTPROCESSING]

insira a descrição da imagem aqui

gbk
fonte
Depois de atualizar para o XCode 7, essa configuração estava de alguma forma YESapenas no meu subprojecte os pontos de interrupção não funcionaram subprojects. E depois de definir NO, ficou perfeito!
Maheswaran Ravisankar de
Isso funcionou para mim somente depois de limpar o projeto para que uma reconstrução completa ocorra.
Executado em
8

Veja esta postagem: Breakpoints não funcionam no Xcode? . Você pode estar pressionando "Executar" em vez de "Depurar", caso em que seu programa não está sendo executado com a ajuda do gdb, caso em que você não pode esperar que os pontos de interrupção funcionem!

Soong
fonte
No Xcode 6.4, agora há apenas um botão Executar e se ele executa uma configuração de depuração ou não depende das configurações de esquema atualmente selecionadas.
user2067021
6

Uma das soluções possíveis para isso poderia ser .... vá para Produto> Esquema> Editar esquema> .. Em Executar> informações> Verificação de executável "Depurar executável".

Soropromo
fonte
Este funcionou para mim depois de bater minha cabeça por 2 dias.
Dileep Perla
feliz que ajudou.
Soropromo
5

Isso me deixou no Xcode 9 por meio dia frustrante. Acabou sendo uma configuração de depuração simples.

Vá em Debug> Debug Workflow e certifique-se de que 'Always Show Disassembly' está desativado. Simples assim. :(

Gaz Long
fonte
Isso funciona para mim, obrigado
Md.Harish-Uz-Jaman Mridha Raju
5

Solução para mim com XCode 9.4.1 (não parou em nenhum ponto de interrupção):

Em Objetivo de compilação -> Configurações de compilação -> Nível de otimização: Mudou de "Otimizar para velocidade" -> "Sem otimização" (agora é mais lento, mas funciona)

Strinder
fonte
5

O que resolveu no meu caso foi bem simples, em Xcode - Product - Clean Build Folder seguido de Product - Run (não o botão Play Xcode).

(Tive o problema no Xcode 11 -beta 4 depois de mudar para o teste de unidade com o botão de reprodução do Xcode pressionado)

Lukas
fonte
4

Cheguei a esta página com o mesmo problema (o código C no Xcode 6 não para nos pontos de interrupção) e nenhuma das soluções acima funcionou (o projeto estava praticamente fora da caixa, em termos de configurações, tão pouca chance de qualquer uma das configurações do depurador ser definido com o valor errado) ...

Depois de perder algum tempo reduzindo o problema, finalmente descobri o culpado (para o meu código):

Xcode (/ LLVM) não gosta do estilo Bison #line comandos de pré processador do .

Removê-los corrigiu o problema (o depurador parou em meus pontos de interrupção).

Dave
fonte
4

Para Xcode 4:

go Product -> Debug ->  Activate Breakpoints
evya
fonte
Obrigado! isso ajudou. Eu mesmo postaria isso, aparentemente pressionei ⌘Y de alguma forma por engano.
Ovi
2

Tenho muitos problemas com pontos de interrupção no Xcode (2.4.1). Eu uso um projeto que contém apenas outros projetos (como uma solução no Visual Studio). Às vezes, acho que os pontos de interrupção não funcionam, a menos que haja pelo menos um ponto de interrupção definido no projeto inicial (ou seja, aquele que contém o ponto de entrada do meu código). Se os únicos pontos de interrupção estiverem em projetos de "nível inferior", eles serão ignorados.

Também parece que o Xcode só lida com operações de ponto de interrupção corretamente se você agir no ponto de interrupção quando estiver no projeto que contém a linha de origem do ponto de interrupção.

Se eu tentar excluir ou desabilitar pontos de interrupção por meio de outro projeto, a ação às vezes não tem efeito, mesmo que o depurador indique que sim. Portanto, vou acabar quebrando em pontos de interrupção desativados ou em um ponto de interrupção (agora invisível) que removi anteriormente.

Charles Anderson
fonte
2

Meus pontos de interrupção não funcionaram e, em seguida, fiz Build / Clean All Targets para fazê-los funcionar novamente.


fonte
2

Acho que o problema pode ser incompatibilidade entre as versões do dispositivo e o Xcode. Tenho esse problema ao tentar depurar no meu iPhone 4S executando o iOS 5.0.1. Ainda estou usando o Xcode 3.2.5. Peguei os símbolos do aparelho selecionando "usar este dispositivo para desenvolvimento" na janela do Organizer. No entanto, este telefone se recusa a fazer um breakpoint Meu antigo 3GS vai quebrar, mesmo projeto Xcode, mesmas configurações ... apenas um dispositivo diferente e está rodando iOS 4.0. Acho que esse é um bug do Xcode no 3.2.5, já que tenho os símbolos. Tendo tentado todas as soluções postadas aqui até agora, decidi que a solução para meu problema é ir em frente e atualizar para o XCode 4. Talvez você não possa depurar com eficácia, a menos que seu SDK base seja pelo menos tão alto quanto o sistema no qual depurar. Talvez isso seja óbvio - alguém pode confirmar?

Edit: Vou atualizar quando puder confirmar que isso é verdade.

Gavin
fonte
2

Excluir minha pasta Build resolveu o problema para mim.

Jack Bellis
fonte
2

Aconteceu a mesma coisa comigo no XCode 6.3.1. Consegui consertar:

  • Acessando Exibir-> Navegadores-> Mostrar Navegadores de Depuração
  • Clique com o botão direito na raiz do projeto -> Mover Breakpoints (se selecionada a opção de usuário)
  • (Eu também selecionei os pontos de interrupção de compartilhamento de opção , embora não tenha certeza se isso é necessário).

Depois de fazer essa alteração, defino as opções de Mover pontos de interrupção de volta para o projeto e desmarco Compartilhar pontos de interrupção opção , e ainda funciona.

Eu não sei exatamente por que, mas isso recupera meus pontos de interrupção.

Osk
fonte
Obrigado! Isso também corrigiu a lentidão de resposta dos logs de depuração
Jim75
2

Para isso, e também para o Xcode 6 e acima, certifique-se de que o botão de estado do ponto de interrupção esteja ativado (o botão em forma de seta azul):

insira a descrição da imagem aqui

df611
fonte
1

No Xcode 4

- Product menu > Manage Schemes
- Select the scheme thats having debugging problems (if only one choose that)
- Click Edit button at bottom
- Edit Scheme dialog appears
- in left panel click on Run APPNAME.app
- on Right hand panel make sure youre on INFO tab
- look for drop down DEBUGGER:
- someone had set this to None
- set to LLDB if this is your preferred debugger
- can also change BUILD CONFIGURATION drop down to Debug 
-      but I have other targets set to AdHoc which debug fine once Debugger is set
brian.clear
fonte
1

Eu encontrei o problema. De alguma forma, o " Show Disassembly when debugging " foi habilitado no meu XCode, o que cria esse problema. Quando o desativei, todo o meu depurador parou no meu código-fonte.

Você pode encontrá-lo em: Product->Debug Workflow->Show Disassemblyao depurar.

Perumal
fonte
1

Você pode ativar / desativar pontos de interrupção no menu suspenso insira a descrição da imagem aqui

Stan
fonte
1

Se tudo mais falhar, em vez de um ponto de interrupção, você pode chamar a seguinte função:

void BreakPoint(void) {
    int i=1;
    #if !__OPTIMIZE__
    printf("Code is waiting; hit pause to see.\n");
    while(i);
    #endif
}

Para retomar, defina manualmente i para zero e, em seguida, pressione o botão Continuar.

William Jockusch
fonte
1

Eu tentei todas as coisas acima, mas para mim apenas desativar os pontos de interrupção de depuração uma vez e, em seguida, ativá-los funcionou.

user8032120
fonte
@IshantMrinal Por que isso não é relevante? O usuário forneceu uma resposta que funcionou em seu cenário.
Noel Widmer
0

Ao definir o seu ponto de interrupção, clique com o botão direito e você deverá obter várias opções sobre como o ponto de interrupção é tratado (registrar vars e continuar, pausar a execução, etc)

Além disso, certifique-se de que a opção "Carregar símbolos lentamente" não esteja selecionada nas preferências de depuração.

(Aplica-se ao Xcode 3.1, não tenho certeza sobre versões anteriores / futuras)

Scott Swezey
fonte
0

Certifique-se também de que a distribuição AppStore do aplicativo não está instalada no dispositivo.


fonte
0

Outra coisa a verificar é se você tiver um arquivo plist "Direitos" para o seu modo de depuração (possivelmente porque você está fazendo coisas com o Keychain), certifique-se de que o arquivo plist tenha a linha "get-task-allow" = YES. Sem ele, a depuração e o registro serão interrompidos.

Davidcann
fonte
0

Parece haver 3 estados para os pontos de interrupção no Xcode. Se você clicar neles, eles passarão por diferentes configurações. O azul escuro está ativado, o acinzentado está desativado e às vezes vejo um azul claro que exigia que eu clique no ponto de interrupção novamente para que ele mude para a cor azul escuro.

Além disso, certifique-se de iniciá-lo com o comando debug e não com o comando run. Você pode fazer isso clicando em opção + comando + retorno ou na opção Ir (depurar) no menu Executar.

crackity_jones
fonte
0

Eu tenho Xcode 3.2.3 SDK 4.1 Breakpoints falharão aleatoriamente. Eu descobri que se você limpar o build e usar o comando touch no build, eles funcionam novamente.

Damon McGIll
fonte
0

Aqui está um obscuro que encontrei: se você estiver trabalhando em uma biblioteca compartilhada (ou um plug-in), seus pontos de interrupção ficarão amarelos na inicialização, o que pode fazer com que você martele seu teclado de frustração e interrompa o processo de depuração. Bem, não faça isso! Os símbolos não serão carregados até que o aplicativo carregue a biblioteca, ponto em que os pontos de interrupção se tornarão válidos. Eu tive este problema com um plugin do navegador ... BPs foram desativados até que eu naveguei para uma página que instanciou meu plugin.

Tim Keating
fonte