gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:10:50 24 4
gpt4 key购买 nike

拿这段代码:

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com