2012-03-01 14 views
45

Da quando ho aggiornato a xcode 4.3 e lascio che il mio debugger sia passato a lldb, qualsiasi richiesta di stampa di una variabile membro fallisce con questo messaggio di errore:lldb non riesce a stampare valori variabili con "errore: il riferimento a 'id' è ambiguo"

(lldb) print request 
error: error: reference to 'id' is ambiguous 
note: candidate found by name lookup is 'id' 
note: candidate found by name lookup is 'id' 
error: 1 errors parsing expression 

'sé' è ok:

(lldb) print self 
(LoginViewController *) $6 = 0x1cd54d50 

e altre forme di stampa della variabile membro anche fallire:

(lldb) print self.request 
error: property 'request' not found on object of type 'LoginViewController *'; did you mean to access ivar 'request'? 
error: 1 errors parsing expression 
(lldb) print self->request 
error: error: reference to 'id' is ambiguous 
note: candidate found by name lookup is 'id' 
note: candidate found by name lookup is 'id' 
error: 1 errors parsing expression 

Tutto il resto sembra funzionare correttamente. La finestra delle variabili di Xcode può recuperare correttamente il valore. Ho provato una build pulita e cancellando ~/Library/Developer/Xcode/DerivedData /. Googling non ha rivelato altre istanze dello stesso problema.

ho trovato un thread sul forum dev di Apple, ma nessuna soluzione:

https://devforums.apple.com/message/623694

ho segnalato questo alla Apple come Bug ID # 11029004.

+0

lldb è ancora un work in progress. – zaph

+5

@Zaph Mi chiedo perché Apple lo abbia reso il debugger predefinito in XCode 4.3 se questo è il caso. – JosephH

+1

Per qualche motivo, la possibilità di visualizzare ivars nel debugger ha una bassa priorità in Apple. Molte volte gli ivar creati creati automaticamente dalle istruzioni '@ property' o dichiarati in' @ implementation' non sono visualizzabili. Le cose stanno migliorando anche se lentamente. Si prega di inviare un bug a bugreport.apple.com. – zaph

risposta

39

ho trovato una soluzione:

Usa "Modifica schema" nel menu "Prodotto", seleziona "Esegui" nella barra sinistra, la scheda "Informazioni" e cambia il Debugger in gdb (questo non si applica a xcode 5, che non ha più gdb).

A quanto pare Apple ha pensato di aver corretto questo errore in xcode 4.3.1, ma succede ancora. Ho inviato alcune informazioni di debug aggiuntive richieste, quindi spero che venga corretto per la prossima versione di xcode. Sta ancora fallendo in 4.3.2. Vedi https://devforums.apple.com/message/623694 per un aggiornamento da Apple.

UPDATE

ho provato vari casi che ho avuto problemi con, e tutti sembrano funzionare bene con lldb in Xcode 4.4.1 - quindi mi raccomando l'aggiornamento se hai questo problema.

+0

Eccellente - grazie! Correzione secondaria: "Modifica schema" si trova nel menu "Prodotto". Il resto della stessa e mi ha salvato la giornata! – mpemburn

+0

@mpemburn grazie, ho corretto che :) – JosephH

+3

Aggiornamento: Xcode 5 ha rimosso gdb completamente e tu sei bloccato con lldb in tutto il suo splendore. –

2

Utilizzare Edit scheme nel menu "Prodotto", selezionare "Esegui" nella barra sinistra, la scheda "Informazioni" e modificare il Debugger in gdb.

Product>Edit Scheme>Run (Schemi)>Build Configuration ha tre opzioni (alcuni potrebbero vedere solo due 1, 2) 1. Debug 2. uscita 3. AdHoc controllo

Basta attraversare se è impostato su Debug in caso contrario, quindi esegui il debug.

Questo è stato l'errore che stavo facendo

1

(Xcode5) Questo non è davvero una risposta diretta alla domanda iniziale, ma penso che sia pertinente e mi dispiacerebbe pensare ore chiunque altro rifiuti come ho fatto io rintracciarlo. Il problema che avevo era che nessun valore variabile veniva mostrato nella finestra di debug.

Ho controllato l'invocazione effettivamente assegnata al compilatore e ho trovato che era ottimizzato con -Os nonostante ogni progetto e destinazione nello spazio di lavoro fossero esplicitamente impostati a -0, e le impostazioni menzionate in altre risposte qui tutto è impostato su Debug.Dopo molte ricerche ho scoperto che c'è un'opzione nella sezione "Informazioni" di ciascun progetto chiamata "Usa xxx per build da riga di comando" dove xxx è Debug/Release o qualsiasi altra configurazione disponibile. Secondo la descrizione del tooltip, questa opzione dovrebbe interessare solo le build fatte tramite la riga di comando con lo strumento xcodebuild (che è un po 'strano perché quello strumento è perfettamente in grado di selezionare quale schema usare come opzione da riga di comando). Ad ogni modo, cambiando questa opzione in Debug ho finalmente ottenuto l'IDE per dire al compilatore che volevo -O0 e -g. Non ricordo che questo accada mai con Xcode4, con lo stesso spazio di lavoro.

Devo anche aggiungere che è possibile effettuare una pulizia prima di modificare questa impostazione. L'ho cambiato senza pulizia, e improvvisamente alcuni dei miei file di intestazione non sono stati trovati (sembrava che le intestazioni precompilate non venissero generate correttamente). Dopo un'altra ora circa di pugnalata al buio, ho scoperto che se prima avessi riportato l'opzione sopra riportata in Release e fatto una pulizia, avrei potuto impostarlo su Debug e creare con successo.

Qualcuno sa se il team di sviluppo Xcode lo utilizza effettivamente? Ho la netta impressione che non lo facciano.

3

Prova con seguente espressione,

p self.view.bounds.size.width 

o l'uso,

po self.view 

p - La stampa è solo utilizza per stampare i valori normali/semplice mentre, po - Stampa oggetto funziona stessa NSLog per stampare il valore di un oggetto

0

Vai a Product ->Scheme ->New Scheme... e creat e un nuovo schema per il tuo obiettivo. Pulisci il tuo prodotto sotto Product ->Clean e la tua app dovrebbe funzionare correttamente.

Fare questo ha risolto il mio problema.

Problemi correlati