我写了一个与此类似的函数:
class abc {
private :
int m_var ;
public :
int func() { return m_var ; }
};
Run Code Online (Sandbox Code Playgroud)
当我尝试打印func()使用abc对象指针时gdb,它给出错误:
**Cannot evaluate function -- may be inlined**
如何从内联函数中打印值?
#include <iostream>
void do_something(void) {
std::cout << "blah blah" << std::endl;
auto lambda_func = [](void){
std::cout << "in lambda" << std::endl;
return;
};
lambda_func();
std::cout << "..." << std::endl;
return;
}
int main(int argc, char **argv) {
do_something();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这个示例程序中,如果你编译(g++ gdb-call-lambda.cpp --std=c++11 -g)然后在gdb(gdb ./a.out)中运行它,你可以让GDB调用任何"普通"函数.例:
(gdb) break main
Breakpoint 1 at 0x4008e7: file gdb-call-lambda.cpp, line 20.
(gdb) r
Starting program: /home/keithb/dev/mytest/gdb-call-lambda/a.out
Breakpoint 1, main (argc=1, argv=0x7fffffffdfb8) at gdb-call-lambda.cpp:20
20 do_something();
(gdb) call do_something()
blah blah …Run Code Online (Sandbox Code Playgroud) 我希望能够使用GDB从STL容器中获取地址并打印一对.
IE:鉴于以下玩具计划:
#include <map>
int main()
{
std::map<int,int> amap;
amap.insert(std::make_pair(1,2));
}
Run Code Online (Sandbox Code Playgroud)
当我尝试检查地图的单个元素时(例如p amap.begin()),我得到:
"无法评估功能 - 可能是内联的"
删除优化并启用完整调试模式,即(-O0和-g3)不起作用.
为什么会发生这种情况,我该如何解决?