c++ - 如何在跳过所有内部实现的同时跳转到 GDB 中 std::function 中的函数?

标签 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?

最佳答案

好的,我设法使用一个简单的 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)

关于c++ - 如何在跳过所有内部实现的同时跳转到 GDB 中 std::function 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52442745/

相关文章:

c++ - gdb:如何将共享库的日志文件重定向到 gdb 输出

C++ Netbeans 调试问题

c++ - 当存储在 std::function 中时,Captureless lambda 不能转换为函数指针

python - 如何使用 Python subprocess.Popen 控制 gdb?

go - 如何使用 gdb 或 delve 将断点设置到 go 方法

c++ - 将临时对象分配给调用对象

linux - 馅饼基地址在gdb中是固定的

c++ - 如何保存 Visual Studio C++ 调试 session 的状态?

c++ - 正确使用 boost::wait boost::condition

c++ - 使用 constexpr 进行常量初始化