“Cannot evaluate function — may be in-lined” error in GDB for STL template container

This is because amap.begin() does not exist in resulting binary. This is how C++ templates work: if you don’t use or explicitly instantiate some template method it is not generated in resulting binary.

If you do want to call amap.begin() from gdb you have to instantiate it. One way to do it is to instantiate all methods of std::map:

#include <map>

template class std::map<int,int>;

int main()
{
  std::map<int,int> amap;
  amap.insert(std::make_pair(1,2));
}

gdb session:

(gdb) p amap.begin()
$1 = {first = 1, second = 2}

Leave a Comment