如何跳过所有内部实现而跳入GDB中std :: function内部的函数?

时间:2018-09-21 11:26:46

标签: c++ gdb

使用此代码:

#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?

1 个答案:

答案 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)