2014-10-15 5 views
11

Sono nuovo di LLDB e sto lavorando con vari std::vector s nel mio codice, tuttavia quando provo a stampare i valori di un vettore o per interrogare la dimensione del mio vettore con qualcosa come expr '(int)myVector[0]' o expr '(int)myVector.size()' il debugger stampa valori che non hanno nulla a che fare con i valori che so che ci sono nel vettore.LLDB C++ debugging

Come sto imparando a eseguire il debug con la linea di comando e LLDB, sono sicuro che mi manca qualcosa qui, chiunque può macchiare il mio errore o dare qualche consiglio?

EDIT Ho dimenticato di essere sotto OS X Mavericks con gli ultimi strumenti da riga di comando installati.

risposta

16

ho trovato la risposta me stesso. Apparentemente gli operatori sovraccaricati come [] non sono consentiti poiché sono in linea, see this question per una migliore spiegazione al riguardo.

Inoltre, non so perché ho inserito le virgolette singole per la frase che volevo valutare (sono quasi sicuro di averlo visto in un altro posto ... cosa significano in realtà in LLDB?) expr 'printf("Hey")'

Quindi, tirando fuori le virgolette e con la risposta nella domanda citato è sufficiente con qualcosa di simile

expr (int) myVector.__begin_[0]

per ottenere il valore unico di una posizione nel vettore.

+0

Tuttavia, una cosa deve ancora essere risolta, come ottenere la dimensione di un vettore? – BRabbit27

+0

'expr (int) myVector.size()' non funziona? (O usando 'p' invece ..?) –

+0

No, ottenendo il seguente' errore: chiamata a una funzione 'std :: __ 1 :: vector > :: size() const '(' _ZNKSt3__16vectorImNS_9allocatorImEEE4sizeEv ') che non è presente nell'obiettivo errore: 0 errori di parsing espressione errore: l'espressione non può essere preparata per l'esecuzione nel target' – BRabbit27

2

Usa p myVector o po myVector. Questi stamperanno il contenuto del tuo vettore (insieme alla dimensione) in un paio di formati diversi.

Per stampare un singolo valore dal vettore, è possibile usare qualcosa come p (int)myVector[0].

+0

"po" probabilmente funzionerà ma onestamente non vedo il punto - un vettore di C++ non è un oggetto objC, e ciò che "po" è per la stampa è specificamente oggetti objc tramite il loro/-debugDescription metodo -description. Poiché un vettore C++ non è uno di questi, "po" finisce per essere quasi lo stesso di "p" –

+0

Inoltre, OP, mostrando il tuo codice potrebbe aiutare a diagnosticare il problema. Quello che stai facendo dovrebbe essere legittimo (assumendo che il tuo vettore contenga veramente interi che sia) –

+0

'p' e' po' stampano in modo efficace il contenuto del vettore, ma sto cercando un modo per stampare solo il singolo valore di una posizione nel vettore perché con 'p' vengono stampate molte informazioni sul vettore. – BRabbit27