2015-08-03 24 views
12

Ho un problema piuttosto fastidioso nel debugger Swift quando sto provando a stampare la descrizione di un oggetto. Quando si cerca di stampare e oggetto, sia utilizzando il comando po o fr v comando, ottengo messaggi comeMessaggio Swift LLBD "<Impossibile determinare la dimensione del byte.>"

error: <EXPR>:1:1: error: use of unresolved identifier 'self' self ^

o

self = <Unable to determine byte size.>

cosa sta succedendo qui? Ci sono motivi per cui il debugger non è in grado di leggere qualcosa come self?

+0

Sto avendo questo problema pure. Non solo per sé ma per molte variabili nel frame.Ho impostato SWIFT_OPTIMIZATION_LEVEL e GCC_OPTIMIZATION_LEVEL su Nessuno, come consigliato da altri, ma ciò non ha avuto alcun effetto. –

+0

Sì, ho avuto questo problema con più di un semplice "io". La stampa completa di 'fr v' includerà spesso i dettagli di altre variabili in memoria e non avrà problemi a stamparle. Sospetto che ci sia un tipo di tipo di oggetto che il debugger non è in grado di analizzare, che è un membro di tutti i diversi oggetti che non riesco a stampare, ma non so quali proprietà avrebbe quel tipo di tipo di oggetto problematico causerebbe questo – Ziewvater

risposta

1
<Unable to determine byte size> 

è il messaggio di errore (un po 'criptico) che LLDB stamperà quando non capisce il tipo di qualcosa.

Lasciatemi elaborare un po 'di più. Quando si digita un'espressione o si esegue una variabile frame, il debugger deve valutare il codice fornito dall'utente o cercare le variabili richieste.

Per presentarvi i risultati, deve anche capire il tipo di cose. Ad esempio, un Int è una cosa che ha un valore numerico le cui dimensioni corrispondono alla dimensione del puntatore sulla tua macchina, ... (beh, per essere precisi al 100%, un Int è una cosa che ha un membro che ha un valore numerico. .., ma LLDB riassume ciò che è lontano da te). Una stringa è una cosa che ha del testo (di nuovo, è un po 'più complicato, ma la LLDB lo riassume). Una delle cose che piace al debugger è la "dimensione in byte" di un tipo, come in quanti byte in memoria occupa un oggetto di questo tipo?

A volte, il debugger non può capire i tipi di cui si parla. Quando ciò accade, ovviamente, una delle cose che non possono essere determinate è la dimensione del byte. Quindi, il messaggio.

Se si esegue in situazioni in cui il debugger non può dedurre i tipi nelle tue app, è possibile inviare i bug http://bugreport.apple.com

+0

Che tipo di informazioni sarebbero utili in una segnalazione di bug su questo? Per quanto posso dire, questo problema sorge ogni volta che l'oggetto che sto cercando di ispezionare ha un riferimento a una particolare classe nel mio progetto. Non posso davvero condividere la classe stessa (è per lavoro, confidenziale), ma che tipo di informazioni sarebbe utile da trasmettere? – Ziewvater

1

Nel mio caso, dopo molte ricerche e test, ho trovato che il 3 ° partito add-on "Crashlytics" e "TwitterKit" (installati tramite cocoapod nel mio caso) causavano questo problema per me. Dopo aver rimosso quelle librerie e fatto una pulizia e poi la compilazione, sono stato in grado di usare di nuovo LLDB correttamente.

Vedi https://stackoverflow.com/a/26451537/2138077

1

Come Scott D accennato, questo può essere qualcosa in tessuto. Se stai usando Fabric, specialmente con TwitterKit, vai su TwitterKit framework e modifica TwitterKit.h manualmente. Sostituzione

#import <TwitterCore/TwitterCore.h>

con

@import TwitterCore;

rende nuovamente debugger utilizzabile. Sidenote: i pod Fabric e Crahlytics sono aggiornati e non interrompono più il debugger.

MODIFICA: Anche i pod di Twitter da fabric sono stati aggiornati e, a partire dalla versione 1.12.0, non interrompono il debugger. Sìì!