Perché i miei punti di interruzione non funzionano?


112

Ho impostato dei punti di interruzione ma Xcode sembra ignorarli.


2
ProdottoClean mi ha aiutato
Alexander Bekert


Ho dovuto fare un riavvio completo con il mio computer per farli funzionare di nuovo, e ora sono super bacati. Sto usando xcode 10.2.1.
llamacorn

2
Xcode 11, riavvia e pulisci Xcode non funzionante, riavvia Mac non funzionante. Elimina l'app sul dispositivo e ricostruisci risolve questo problema. Spero che questo aiuti qualcuno
Randall Wang

Risposte:


148

Prima di tutto, sono d'accordo al 100% con la gente precedenti che dicono che gira su OFF Load Symbols Lazily .

Ho altre due cose da aggiungere.

(Il mio primo suggerimento sembra ovvio, ma la prima volta che qualcuno me lo ha suggerito, la mia reazione è stata di questo tipo: "dai, per favore, pensi davvero che non lo saprei meglio ... oh.")

  1. Assicurati di non aver impostato accidentalmente "Active Build Configuration" su "Release".

  2. In "Target" nella visualizzazione ad albero grafica del progetto, fare clic con il pulsante destro del mouse sul target e fare "Ottieni informazioni". Cerca una proprietà denominata "Genera simboli di debug" (o simile) e assicurati che sia CONTROLLATA (alias ON). Inoltre, potresti provare a trovare (anche in Destinazione >> Ottieni informazioni) una proprietà chiamata "Formato informazioni di debug" e impostarla su "Nano con file dsym".

Ci sono una serie di altre proprietà in Target >> Ottieni informazioni che potrebbero interessarti. Cerca cose come l'ottimizzazione o la compressione del codice e disattiva quella roba (presumo che tu stia lavorando in una modalità di debug, quindi questo non è un cattivo consiglio). Inoltre, cerca cose come rimuovere i simboli e assicurati che sia anche DISATTIVATO. Ad esempio, "Strip Linked Product" dovrebbe essere impostato su "No" per la destinazione di debug.


8
Su XCode 4.5.2 ho riscontrato questo problema e si è scoperto che era perché avevo abilitato "Ottimizzazione del tempo di collegamento", quindi questa è un'altra cosa da controllare
taxilian

6
Per modificare la configurazione della build, vai su Prodotto -> Schema -> Modifica schema, in Esegui - Informazioni. Per me ciò che ha funzionato è stato controllare "Eseguibile di debug" in quel menu.
Jeffrey Sun

2
Dirottando la risposta principale per aggiungere che la sintassi di Bison sembra essere un'altra causa (esotica) dei punti di interruzione che non funzionano (vedi la mia risposta sotto). Si spera di risparmiare un po 'di tempo alla prossima persona con quel problema.
Dave

2
È anche semplicissimo attivare inavvertitamente l'attivazione del punto di interruzione con ⌘Y. Quindi state attenti, ragazzi.
dsgrnt

1
Ho provato il punto numero 1 e ha funzionato per me. Mi ha davvero aiutato. Upvoted.
NSPratik

49

In Xcode 7, ciò che ha funzionato per me era:

1) Assicurati che la destinazione -> schema -> Esegui - sia in modalità Debug (era Rilascio)

2) Assicurati di selezionare l'opzione "Eseguibile di debug" vedi sotto:

inserisci qui la descrizione dell'immagine


4
Questo è esattamente quello che è successo a me, la casella di controllo era deselezionata
anoop4real

Lo stesso problema per me. Questa opzione non dovrebbe essere abilitata per impostazione predefinita (XCode 8.3)? Non dovremmo essere tutti sviluppatori, disposti a eseguire il debug comunque?
dgmz

Ha funzionato per me in Xcode 9.3, sarebbe fantastico se fornissi un'altra immagine per l'opzione 1.
Kazi Abdullah Al Mamun

24

Vai alle preferenze di debug di Xcode. Assicurati che "Carica simboli pigramente" NON sia selezionato.


7
Sfortunatamente non ci sono preferenze di "debug" in Xcode 6, e "pigramente" non appare nella documentazione. Sospiro.
Oscar

1
ok, ora non riesco a trovare l'opzione 'Carica simboli pigramente' in XCode 6
RNA

14

Stavo solo avendo lo stesso problema (di nuovo). Dopo aver controllato tre volte "Carica pigramente i simboli" e aver rimosso e messo a punto i flag di generazione delle informazioni, ho fatto quanto segue:

  1. esci da Xcode
  2. apri una finestra di terminale e fai il cd nella directory del progetto
  3. cd nella directory .xcodeproj
  4. elimina tutto tranne il file .pbxproj (avevo frank.mode1v3 e frank.pbxuser)

Puoi eseguire la stessa operazione nel Finder facendo clic con il pulsante destro del mouse / opzione sul pacchetto .xcodeproj e selezionando "Mostra contenuto pacchetto".

Quando ho riavviato Xcode, tutte le mie finestre erano state ripristinate alle posizioni predefinite, ecc., Ma i punti di interruzione funzionavano!


2
Funziona, ma cancella tutte le tue preferenze ... Questo dovrebbe essere fatto quando nient'altro ha funzionato.
Rémi Doolaeghe

ha funzionato per me, grazie. Mi chiedo perché Xcode fa schifo così tanto. Xcode è il peggior software mai scritto da Apple.
Duck

Wow, ha 5 anni. Difficile credere che funzioni ancora e che sia ancora un problema!
Frank Szczerba

Non ha funzionato per me. Sto eseguendo Xcode 6.01. Ora, quando compilo, ricevo più errori di file mancanti. Sto ripristinando il mio codice per risolverlo.
Native_Mobile_Arch_Dev

Dovevo solo riavviare Xcode, il mio caso era dovuto al controllo delle versioni di git, durante il commit dei dati di stato dell'interfaccia utente di xcode.
Juan Boero

13

Per Xcode 4.x: vai al prodotto> Flusso di lavoro di debug e deseleziona "Mostra disassemblaggio durante il debug".

Per Xcode 5.x Goto Debug> Debug Workflow e deseleziona "Mostra disassemblaggio durante il debug".


11

Un'altra ragione

Impostare DeploymentPostprocessingsu NO in BuildSettings - dettagli qui

In breve -

L'attivazione di questa impostazione indica che i file binari devono essere rimossi e la modalità file, il proprietario e le informazioni sul gruppo devono essere impostate su valori standard. [DEPLOYMENT_POSTPROCESSING]

inserisci qui la descrizione dell'immagine


Dopo l'aggiornamento a XCode 7, questa impostazione era in qualche modo YESsolo nel mio subprojecte quindi i punti di interruzione non funzionavano subprojects. E dopo aver impostato NO, è stato perfetto!
Maheswaran Ravisankar

Questo ha funzionato per me solo dopo aver pulito il progetto, quindi verrà eseguita una ricostruzione completa.
Ha corso il

8

Vedi questo post: I punti di interruzione non funzionano in Xcode? . Potresti premere "Esegui" invece di "Debug", nel qual caso il tuo programma non funziona con l'aiuto di gdb, nel qual caso non puoi aspettarti che i breakpoint funzionino!


In Xcode 6.4, ora c'è solo un pulsante Esegui e se esegue o meno una configurazione di debug dipende dalle impostazioni dello schema attualmente selezionato.
user2067021

6

Una delle possibili soluzioni per questo potrebbe essere .... vai su Prodotto> Schema> Modifica schema> .. Sotto Esegui> informazioni> Eseguibile seleziona "Eseguibile di debug".


Questo ha funzionato per me dopo aver sbattuto la testa per 2 giorni.
Dileep Perla

contento che abbia aiutato.
Soropromo

5

Questo mi ha tenuto in Xcode 9 per mezza giornata frustrante. Alla fine è stata una semplice impostazione di debug.

Vai a Debug> Debug Flusso di lavoro e assicurati che "Mostra sempre disassemblaggio" sia disattivato. Semplice come quella. :(


Questo funziona per me, grazie
Md.Harish-Uz-Jaman Mridha Raju

5

Soluzione per me con XCode 9.4.1 (non si è fermato a nessun punto di interruzione):

Under build Target -> Build Settings -> Optimization Level: Switched from "Optimize for speed" -> "No optimization" (ora è più lento ma funziona)


5

Ciò che lo ha risolto nel mio caso è stato abbastanza semplice, in Xcode - Product - Clean Build Folder seguito da Product - Run (non il pulsante Riproduci Xcode).

(Si è verificato il problema su Xcode 11 -beta 4 dopo il passaggio a unit test con la pressione prolungata del pulsante di riproduzione Xcode)


4

Sono arrivato in questa pagina con lo stesso problema (il codice C in Xcode 6 non si ferma ai punti di interruzione) e nessuna delle soluzioni sopra ha funzionato (il progetto era praticamente fuori dagli schemi, dal punto di vista delle impostazioni, quindi poche possibilità per nessuna delle impostazioni del debugger di essere impostato su un valore errato) ...

Dopo aver perso un po 'di tempo a ridurre il problema, ho finalmente scoperto il colpevole (per il mio codice):

A Xcode (/ LLVM) non piacciono i #linecomandi del preprocessore in stile Bison .

La loro rimozione ha risolto il problema (il debugger si è fermato ai miei breakpoint).


4

Per Xcode 4:

go Product -> Debug ->  Activate Breakpoints

Grazie! questo ha aiutato. Stavo per postarlo io stesso, a quanto pare ho spinto ⌘Y in qualche modo per sbaglio.
Ovi

2

Ho molti problemi con i punti di interruzione in Xcode (2.4.1). Uso un progetto che contiene solo altri progetti (come una soluzione in Visual Studio). A volte trovo che i punti di interruzione non funzionano affatto a meno che non ci sia almeno un punto di interruzione impostato nel progetto iniziale (cioè quello contenente il punto di ingresso per il mio codice). Se gli unici punti di interruzione sono in progetti di "livello inferiore", vengono semplicemente ignorati.

Sembra anche che Xcode gestisca correttamente le operazioni del punto di interruzione solo se agisci sul punto di interruzione quando sei nel progetto che contiene la riga di origine su cui si trova il punto di interruzione.

Se provo a eliminare o disabilitare i punti di interruzione tramite un altro progetto, l'azione a volte non ha effetto, anche se il debugger indica che lo è. Quindi mi ritroverò a rompere su punti di interruzione disabilitati o su un punto di interruzione (ora invisibile) che ho rimosso in precedenza.


2

Ho avuto i miei punti di interruzione non funzionanti e quindi ho fatto Build / Clean All Targets per farli funzionare di nuovo.


2

Penso che il problema potrebbe essere l'incompatibilità tra le versioni del dispositivo e Xcode. Ho questo problema durante il tentativo di eseguire il debug sul mio iPhone 4S con iOS 5.0.1. Sto ancora usando Xcode 3.2.5. Ho ottenuto i simboli dal telefono selezionando "usa questo dispositivo per lo sviluppo" nella finestra Organizer. Tuttavia, questo telefono rifiuta il breakpoint. Il mio vecchio 3GS avrà un punto di interruzione, lo stesso progetto Xcode, le stesse impostazioni ... solo un dispositivo diverso e con iOS 4.0. Immagino che questo sia un bug di Xcode nella 3.2.5, poiché ho i simboli. Dopo aver provato tutte le soluzioni pubblicate qui fino ad ora, ho deciso che la soluzione al mio problema è andare avanti e aggiornare a XCode 4. Forse non è possibile eseguire il debug in modo efficace a meno che il proprio SDK di base non sia alto almeno quanto il sistema su cui eseguire il debug. Forse è ovvio - qualcuno può confermarlo?

Modifica: aggiornerò quando posso confermare che è vero.


2

L'eliminazione della mia cartella Build ha risolto il problema per me.


2

Mi è successa la stessa cosa in XCode 6.3.1. Sono riuscito a risolverlo:

  • Andando a Visualizza-> Navigatori-> Mostra navigatori di debug
  • Fare clic con il tasto destro nella radice del progetto -> Sposta punti di interruzione (se selezionata l'opzione Utente)
  • (Ho anche selezionato l'opzione Condividi punti di interruzione , anche se non sono sicuro se fosse necessario).

Dopo aver apportato tale modifica, reimpostare le opzioni Sposta punti di interruzione nel progetto e deselezionando Condividi punti di interruzione opzione e funziona ancora.

Non so esattamente perché, ma questo mi riporta indietro i miei breakpoint.


Grazie! Questo ha anche risolto la lenta reattività dei log di debug
Jim75

2

Per questo, e anche per Xcode 6 e versioni successive, assicurati che il pulsante di stato del punto di interruzione sia attivato (il pulsante blu a forma di freccia):

inserisci qui la descrizione dell'immagine


1

In 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

Ho trovato il problema. In qualche modo il " Mostra disassemblaggio durante il debug " è stato abilitato nel mio XCode che crea quel problema. Quando l'ho disabilitato, tutto il mio debugger si è fermato nel mio codice sorgente.

Puoi trovarlo sotto: Product->Debug Workflow->Show Disassemblydurante il debug.


1

È possibile attivare / disattivare i punti di interruzione nel menu a discesa inserisci qui la descrizione dell'immagine


1

Se tutto il resto fallisce, invece di un punto di interruzione, puoi chiamare la seguente funzione:

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

Per riprendere, imposta manualmente i su zero, quindi premi il pulsante Riprendi.


1

Ho provato tutte le cose precedenti, ma per me solo la disattivazione dei punti di interruzione di debug una volta e poi l'attivazione ha funzionato.


@IshantMrinal Perché questo non è rilevante? L'utente ha fornito una risposta che ha funzionato nel suo scenario.
Noel Widmer

0

Quando si imposta il punto di interruzione, fare clic con il pulsante destro del mouse e si dovrebbero ottenere diverse opzioni su come viene gestito il punto di interruzione (registro variabili e continua, sospensione dell'esecuzione, ecc.)

Assicurati anche che "Carica simboli pigramente" non sia selezionato nelle preferenze di debug.

(Si applica a Xcode 3.1, non sono sicuro delle versioni passate / future)


0

Assicurati inoltre che la distribuzione AppStore dell'app non sia installata anche sul dispositivo.


0

Un'altra cosa da controllare è che se hai un file plist "Entitlements" per la tua modalità di debug (forse perché stai facendo cose con il portachiavi), assicurati che il file plist abbia la riga "get-task-allow" = YES. Senza di esso, il debug e la registrazione verranno interrotti.


0

Sembra che ci siano 3 stati per i punti di interruzione in Xcode. Se fai clic su di essi, passeranno attraverso le diverse impostazioni. Il blu scuro è abilitato, il grigio è disabilitato e ho visto un blu pallido a volte che mi richiedeva di fare di nuovo clic sul punto di interruzione per farlo passare al colore blu scuro.

Oltre a questo assicurati di avviarlo con il comando debug e non con il comando run. Puoi farlo premendo opzione + comando + ritorno o l'opzione Vai (debug) dal menu di esecuzione.


0

Ho Xcode 3.2.3 SDK 4.1 Breakpoints fallirà in modo casuale. Ho scoperto che se pulisci la build e usi il comando touch sotto build, funzionano di nuovo.


0

Eccone uno oscuro in cui mi sono imbattuto: se stai lavorando su una libreria condivisa (o un plugin), i tuoi punti di interruzione diventeranno gialli all'avvio, il che potrebbe farti martellare la tastiera per la frustrazione e uccidere il processo di debug. Beh, non farlo! I simboli non verranno caricati fino a quando l'app non carica la libreria, a quel punto i punti di interruzione diventeranno validi. Mi sono imbattuto in questo problema con un plug-in del browser ... I BP sono stati disabilitati finché non sono passato a una pagina che ha istanziato il mio plug-in.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.