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.


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.


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


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.


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!


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".


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


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!


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".


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. :(


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)


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)


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).


4

Para Xcode 4:

go Product -> Debug ->  Activate Breakpoints

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.


2

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


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.



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.


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


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

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.


1

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


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.


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.


@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)


0

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


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.


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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.