拿这段代码:
#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/