(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

Similarly, I can’t get the iterator (though I have less experience here, so my syntax may be wrong):

2 Solutions Collect From Internet About “Evaluating an expression with overloaded operators in c++ lldb”

Note that the C++ standard libraries are set up so that they inline all the templated functions that they can sensibly inline, and no real function copies exist. So for instance, when you go to call std::vector<int>::begin(), there is no such function. All its uses have been inlined.

That is why you are getting errors about “call to function… not present in target.” There may be inlined copies of the function, but none we can actually call. As an example, if I build a little C++ program that makes a std::vector, and pushes some elements onto it and then iterates over them, and then do:

and a few more for basic_string, and that’s all. So there aren’t any real implementations that we can call. Then once we’ve only got a little bit of the real world of these std objects available to us, the world falls apart in other odd ways as you start to push on it.

lldb isn’t currently smart enough to figure out how to reconstitute a templated function/method from the C++ standard library’s header files. We don’t have enough of the environment in which your code was originally compiled to do that task.

Note that this isn’t really a problem with overloaded operators, it is more a problem with the way the std libraries are used by the compiler. Things should work better for your own classes, where at -O0 there isn’t so much inlining.

I just ran into the same issue and apparently found a simple work-around.
You can access i-th element of a vector vec like this: