采取这个代码:
#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
,完全跳过里面的 lambdastd::function
.
是否可以以某种方式配置 gdb,其中step
在第 17 行会直接带我到第 7 行的 lambda 吗?
好的,我设法使用一个简单的 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)