2014-10-15 17 views
11

Jestem nowy w LLDB i pracuję z różnymi std::vector s w moim kodzie, jednak kiedy próbuję wydrukować wartości wektora lub zapytać o rozmiar mojego wektora z czymś takim jak expr '(int)myVector[0]' lub expr '(int)myVector.size()' debugger drukuje wartości, które nie mają nic wspólnego z wartościami, które wiem, że są w wektorze.LLDB C++ debugowanie

Kiedy uczę się debugowania za pomocą linii poleceń i LLDB, jestem pewien, że czegoś tutaj brakuje, czy ktoś może wykryć mój błąd lub udzielić porady?

EDYCJA Zapomniałem powiedzieć, że jestem pod OS X Mavericks z zainstalowanymi najnowszymi narzędziami wiersza poleceń.

Odpowiedz

16

Sam znalazłem odpowiedź. Wygląda na to, że przeciążone operatory, takie jak [], są niedozwolone, ponieważ są one wstawione, see this question dla lepszego wyjaśnienia tego.

Co więcej, nie wiem, dlaczego umieściłem pojedyncze cytaty na stwierdzenie, które chciałem ocenić (jestem prawie pewien, że widziałem to w innym miejscu ... co one właściwie oznaczają w LLDB?) expr 'printf("Hey")'

Więc, wyjmując cytaty i korzystania odpowiedź w cytowanym pytaniu wystarczy coś jak

expr (int) myVector.__begin_[0]

aby uzyskać pojedynczą wartość pozycji w wektorze.

+0

Jednak nadal pozostaje jedna kwestia do rozwiązania, jak uzyskać rozmiar wektora? – BRabbit27

+0

'expr (int) myVector.size()' nie działa? (Lub używając 'p' zamiast ..?) –

+0

Nie, uzyskanie następującego' błędu: wywołanie funkcji 'std :: __ 1 :: wektor > :: size() const '(' _ZNKSt3__16vectorImNS_9allocatorImEEE4sizeEv '), który nie występuje w błędzie docelowym błąd: 0 błędy analizujące wyrażenie błąd: Wyrażenie nie mogło być przygotowane do działania w celu ' – BRabbit27

2

Użyj p myVector lub po myVector. Będą one drukować zawartość Twojego wektora (obok rozmiaru) w kilku różnych formatach.

Aby wydrukować pojedynczą wartość z wektora, można użyć czegoś takiego jak p (int)myVector[0].

+0

"Po" prawdopodobnie będzie działał, ale szczerze mówiąc nie widzę sensu - wektor C++ nie jest obiektem ObjC, a czym jest "po", to konkretnie drukowanie obiektów ObjC za pomocą metody -description/-debugDescription. Ponieważ wektor C++ nie jest jednym z nich, "po" kończy się prawie tak samo jak "p" –

+0

Również OP, pokazując twój kod pomoże zdiagnozować problem. To co robisz powinno być poprawne (zakładając, że twój wektor naprawdę zawiera liczby całkowite) –

+0

'p' i' po' efektywnie drukuje zawartość wektora, ale szukam sposobu na wydrukowanie pojedynczej wartości pozycji w wektorze, ponieważ przy 'p' wydrukowano wiele informacji o wektorze. – BRabbit27