使用此代码:
#include <iostream>
#include <memory>
#include <functional>
std::function<int()> getint = []
{
return 5;
};
void foo(int i)
{
std::cout<<i<<std::endl;
}
int main()
{
foo(getint());
}
我在第17行的断点处停止。我想进入getint
函数。默认情况下,使用gdb的step
会带我经历一些我不感兴趣的std::function
的内部废话。如果继续执行,最终我会进入lambda,但必须这样做每个std::function
调用都非常麻烦。
我尝试使用skip
命令:
skip -rfu ^std::.*
但这会导致step
直接跳入foo
,完全跳过std::function
内部的lambda。
是否可以以某种方式配置gdb,其中第17行的step
会将我带到第7行的lambda?
答案 0 :(得分:1)
好吧,我设法用一个简单的python脚本解决了这个问题:
import gdb
import re
def stop_handler(event):
frame_name = gdb.selected_frame().name();
if re.search("(^std::.*)|(^boost::.*)", frame_name) != None:
gdb.execute("step")
gdb.events.stop.connect(stop_handler)