Я отлаживаю программу на С++ в Xcode 5 с помощью lldb, и я хотел бы оценивать произвольные выражения в отладчике, особенно те, которые используют перегруженные операторы.
Например, я создал очень простой проект Xcode 5 С++ со следующими параметрами main.cpp и all для компилятора/компоновщика/etc, установленными по умолчанию:
#include <iostream>
#include <vector>
int main(int argc, const char * argv[])
{
std::vector<int> vec;
vec.push_back(42);
std::cout << "vec[0] = " << vec[0] << std::endl;
return 0;
}
Я установил точку останова на строке return 0;
и запустил программу.
Затем в командной строке lldb печать вектора в целом отлично работает:
(lldb) expr vec
(std::__1::vector<int, std::__1::allocator<int> >) $0 = size=1 {
[0] = 42
}
Однако я не могу получить доступ к своим членам, используя перегруженный operator[]
:
(lldb) expr vec[0]
error: call to a function 'std::__1::vector<int, std::__1::allocator<int> >::operator[](unsigned long)' ('_ZNSt3__16vectorIiNS_9allocatorIiEEEixEm') that is not present in the target
error: The expression could not be prepared to run in the target
Точно так же я не могу получить итератор (хотя у меня меньше опыта здесь, поэтому мой синтаксис может быть неправильным):
(lldb) expr vector<int>::iterator it = vec.begin()
error: use of undeclared identifier 'vector'
error: expected '(' for function-style cast or type construction
error: expected '(' for function-style cast or type construction
error: 3 errors parsing expression
и
(lldb) expr (vector<int>::iterator) vec.begin()
error: use of undeclared identifier 'vector'
error: expected '(' for function-style cast or type construction
error: expected '(' for function-style cast or type construction
error: 3 errors parsing expression
Аналогично, печать простой строки отлично работает:
(lldb) expr string("a")
(std::__1::string) $0 = "a"
Однако простая конкатенация строк не выполняется:
(lldb) expr string("a") + string("b")
error: invalid operands to binary expression ('string' (aka 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >') and 'string')
error: 1 errors parsing expression
Что я делаю неправильно? Поддерживает ли lldb оценку с перегруженными операторами?
Заранее благодарю вас!