如何在跳过所有内部实现的同时跳转到 GDB 中 std::function 中的函数?
How can I jump into a function held inside std::function in GDB while skipping all the internal implementation?
取以下代码:
#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
内部的λ。
是否可以以某种方式配置 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)
相关文章:
- 如何使用gdb制作一个可以漂亮地打印每个对象的C++函数
- 如何解释GDB中回溯的模板函数签名?
- 如果以下行不包含决策或分支,GDB 无法单步跳过函数
- 如何在跳过所有内部实现的同时跳转到 GDB 中 std::function 中的函数?
- 在gdb中显示当前函数的调用函数
- gdb-查找strncmp()函数的值
- 默认复制/移动构造函数时 GDB 中的奇怪行为
- 如何在 gdb 中的所有构造函数上同时为 C++ 对象设置断点?
- GDB 如何查找函数退出的位置
- 从函数获取 char* 后的条件 gdb 断点
- gdb:在多线程程序中调用函数,不进行线程
- 如果构造函数从调用到 std::make_shared 崩溃,GDB 是否可以显示崩溃的详细信息
- 在 GDB - C++ 中反汇编重载成员函数
- 如何在标准库C/C++函数中进行gdb单步执行操作
- GDB:在 C++ 中的类函数上创建一个断点
- GDB打印具有虚拟函数类的非弦乐值的静态常量阵列的无效地址
- 如何在GDB中调用C 函数
- 什么是clang 选项,以便在GDB中我可以使用std :: cout作为函数参数
- gdb函数从本地作用域调用std::vector会导致错误
- 关于gdb函数格式的澄清